7
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Djangoの管理サイト機能を使ってみる

Posted at

はじめに

pythonを使ってマスタを作成しようと考えていたところ、Djangoを使った管理サイト機能を発見。作成したときにはまったこと等を備忘録。
SQL Server,Oracleは利用経験があったが、MySQLは初めて。

環境

  • Windows10 64bit
  • Python 3.5.4
  • Django 1.11.6

Djangoを使ってWebアプリケーションを立ち上げてみる

プロジェクト作成

Python、Anacondaのインストール方法はこちらの記事を参考にしてみてください。
Anacondaで新しい環境を作成し、コマンドプロンプトに以下コマンドを入力してDjangoをインストール。

pip install Django

Djangoの後ろにバージョンを指定してあげると任意のバージョンのDjangoをインストールできます。

pip install Django==1.10.5

作成したいフォルダーに移動したら、以下のコマンドを打ちます。

django-admin startproject 好きなプロジェクト名

すると、プロジェクトが作成されます。
今回はSampleという名前で作成しました。

下記のようなファイル構成になっているかと思います。
image.png

Webアプリケーションを立ち上げてみる

作成したプロジェクトのmanage.pyのあるディレクトリに移動します。

移動したら以下のコマンドを実行

python manage.py migrate

以下のような反応があれば成功

image.png

最後に以下のコマンドを実行

python manage.py runserver

Webブラウザを開いて http://127.0.0.1:8000/
にアクセスすると、以下のようなブラウザが立ち上げるはずです。

image.png

ちなみに終了したい場合はコマンドプロンプトでCtrl+Cで終了できます。

Pymysqlを使ってDB作成

MySQLのインストール

こちらのサイト等を参考にしました。

pymysqlのインストール

続いてpymysqlのインストールをしていきます。
コマンドプロンプトで以下のコードを入力。

pip install PyMySQL

途中でmysql-connector-pythonも入れるように怒られたので、こちらも入れます。

pip install mysql-connector-python

コードの編集

manage.pyにpymysqlをimportすることで、pymysqlが使えるようになります。
ので、以下のコードをmanage.pyに追加。

manage.py
import pymysql

pymysql.install_as_MySQLdb()

続いてsettings.pyを編集します。
DBの初期設定ではsqliteへの接続となっていると思うので、MySQL用に変更します。

settings.py
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': '設定したDB名',
        'USER': 'DBへ接続する好きなユーザー名',
        'PASSWORD': 'DBへ接続するユーザーの好きなパスワード',
    }
}

MySQLを使ってDB作成

MySQLのコマンドプロンプトを使って以下のコードを入力。

CREATE DATABASE 先ほどsettings.pyで設定したDB名;

接続確認

コマンドプロンプトを立ち上げて、マイグレーションしてみます。

python manage.py migrate

image.png

この画面がでて、以下のテーブルがMySQLのDBに追加されていればDjangoとMySQLの接続成功です。

image.png

(上の画像は後で紹介するAuthUserモデルを作成してから接続したものなので、多少違うかも)

本番環境でもMySQLを使えるようにする方法

上の操作はrunserver環境のみでの適用なので、wsi.pyに以下のコードを追加します。

wsgi.py
import pymysql

pymysql.install_as_MySQLdb()

管理サイト作成

ログイン情報作成

再びコマンドプロンプトを起動し、
manage.pyの存在するディレクトリまで移動し、以下のコマンドを実行

python manage.py startapp accounts

下記のフォルダが追加されるはずです。

image.png

accountsアプリケーションを認識してもらうために、
sampleフォルダのsetting.pyに以下のコードを追加します。

setting.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'accounts', #追加
]

acoountsアプリケーションのmodels.pyにAuthUserモデルを追加します。

models.py
from __future__ import unicode_literals
from django.utils.encoding import python_2_unicode_compatible
from django.db import models
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin


@python_2_unicode_compatible
class AuthUserManager(BaseUserManager):
    def create_user(self, username, email, password, last_name, first_name):
        """
        ユーザ作成

        :param username: ユーザID
        :param email: メールアドレス
        :param password: パスワード
        :param last_name: 苗字
        :param first_name: 名前
        :return: AuthUserオブジェクト
        """
        if not email:
            raise ValueError('Users must have an email')
        if not username:
            raise ValueError('Users must have an username')

        user = self.model(username=username,
                          email=email,
                          password=password,
                          last_name=last_name,
                          first_name=first_name)
        user.is_active = True
        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_superuser(self, username, email, password, last_name, first_name):
        """
        スーパーユーザ作成

        :param username: ユーザID
        :param email: メールアドレス
        :param password: パスワード
        :param last_name: 苗字
        :param first_name: 名前
        :return: AuthUserオブジェクト
        """
        user = self.create_user(username=username,
                                email=email,
                                password=password,
                                last_name=last_name,
                                first_name=first_name)
        user.is_staff = True
        user.is_superuser = True
        user.save(using=self._db)
        return user


@python_2_unicode_compatible
class AuthUser(AbstractBaseUser, PermissionsMixin):
    """
    ユーザ情報を管理する
    """
    class Meta:
        verbose_name = 'ユーザ'
        verbose_name_plural = 'ユーザ'

    def get_short_name(self):
        """
        ユーザの苗字を取得する

        :return: 苗字
        """
        return self.last_name

    def get_full_name(self):
        """
        ユーザのフルネームを取得する

        :return: 苗字 + 名前
        """
        return self.last_name + self.first_name

    username = models.CharField(verbose_name='ユーザID',
                                unique=True,
                                max_length=30)
    last_name = models.CharField(verbose_name='苗字',
                                 max_length=30,
                                 default=None)
    first_name = models.CharField(verbose_name='名前',
                                  max_length=30,
                                  default=None)
    email = models.EmailField(verbose_name='メールアドレス',
                              null=True,
                              default=None)
    date_joined = models.DateTimeField(auto_now_add=True)
    is_active = models.BooleanField(verbose_name='有効フラグ',
                                    default=True)
    is_staff = models.BooleanField(verbose_name='管理サイトアクセス権限',
                                   default=False)

    USERNAME_FIELD = 'username'
    REQUIRED_FIELDS = ['email', 'last_name', 'first_name']
    objects = AuthUserManager()

    def __str__(self):
        return self.last_name + ' ' + self.first_name

settings.pyに作成したAuthUserモデルを反映させます。

settings.py
AUTH_USER_MODEL = 'accounts.AuthUser'

実行準備

実行準備をしていきます。

まず、コマンドプロンプトを立ち上げて以下のコードを入力します。
マイグレーションです。

python manage.py makemigrations

もし、もうすでにmakemigrationsやmigrateを実行している場合、マイグレーションをするとエラーとなることがあるそうです。
私はなりました。
特に問題なければ一度DBのテーブルを全て削除した状態でマイグレーションを実行すると、できます。

続いてコマンドプロンプトからログインユーザーを作成します。
以下のコードを実行

python manage.py createsuperuser

すると、以下のような感じでコマンド上で登録ができるはずです。
image.png

一度パスワード間違えたみたいで怒られてしまいました…

ログインしてみる

サーバーを起動してログインしましょう。

python manage.py runserver

http://localhost:8000/admin/
にアクセス

image.png

image.png

ログインできました。

日本語にしたい…

ってときは、settings.pyを少しいじると日本語になります。

settings.py
LANGUAGE_CODE = 'ja'

TIME_ZONE = 'Asia/Tokyo'

この管理サイトいろいろと他にもできるのですが、制限も多く存在するみたいですね。
(こちらのサイトさん参照)

参考サイト

7
15
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?