初めてのDjangoアプリ1【Python】

Pythonで最も有名なフレームワークDjangoをWin7で動かしてみます!
InstagramやPinterestもDjangoで作られたそうですから、スゴイですね。
ちなみにチュートリアルで一番分かりやすかったのはDjango Girlsです。

Djangoのインストール

まずはvenvで仮想環境を構築します。

1
2
3
4
5
E:\foo>python -m venv djp
E:\foo>cd djp
E:\foo\djp>cd Scripts
E:\foo\djp\Scripts>activate
(djp) E:\foo\djp\Scripts>

pipでDjangoをインストールします。

1
2
3
4
5
(djp) E:\foo\djp\Scripts>pip install django
Collecting django
...中略...
Successfully installed django-2.0.5 pytz-2018.4
(djp) E:\foo\djp\Scripts>

Djangoのバージョンは2.0.5です。

1
2
(djp) E:\foo\djp\Scripts>python -m django --version
2.0.5

あ、もう一つ。
mysqlのドライバとして、mysqlclientをインストールしておきます。
ないとDB周りでエラーになるので、インストールすると中でうまいことやってくれるみたいです。

1
2
3
4
5
6
7
(djp) E:\foo\djp\Scripts>pip install mysqlclient
Collecting mysqlclient
Using cached mysqlclient-1.3.12-cp36-cp36m-win_amd64.whl
Installing collected packages: mysqlclient
Successfully installed mysqlclient-1.3.12

(djp) E:\foo\djp\Scripts>

Djangoプロジェクトの作成

Djangoのプロジェクトを作成します。

1
2
3
(djp) E:\foo\djp\Scripts>cd ..
(djp) E:\foo\djp>django-admin startproject sampleproject
(djp) E:\foo\djp>

Djangoサーバーの起動

Djangoのサーバーを起動します。

1
2
3
4
5
6
7
8
9
10
11
12
13
(djp) E:\foo\djp>cd sampleproject
(djp) E:\foo\djp\sampleproject>python manage.py runserver
Performing system checks...

System check identified no issues (0 silenced).

You have 14 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.

May 12, 2018 - 09:55:53
Django version 2.0.5, using settings 'sampleproject.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.

migrationのワーニングが吐かれていますが、とりあえずは無視して、http://127.0.0.1:8000/にアクセスします。

Django install worked

成功してるみたいです。
ロケットがかわいいですね。
サーバーはCTRL+Cで停止します。

アプリケーションの作成

Djangoのアプリケーションを作成します。
Djangoにはプロジェクトアプリケーションという概念があります。

プロジェクトとアプリケーション
プロジェクトとアプリケーションの違いとは何でしょうか?アプリケーションとは、実際に何らかの処理を行う Web アプリケーションを指します。例えばブログシステムや公開レコードのデータベース、単純な投票アプリといった具合です。プロジェクトとは、あるウェブサイト向けに設定とアプリケーションを集めたものです。一つのプロジェクトには複数のアプリケーションを入れられ ます。また、一つのアプリケーションは複数のプロジェクトで使えます。
はじめての Django アプリ作成、その 1 | Django documentation | Django より

1
2
3
(djp) E:\foo\djp>cd sampleproject
(djp) E:\foo\djp\sampleproject>python manage.py startapp sampleapp
(djp) E:\foo\djp\sampleproject>

これでアプリケーションができました。
次に、アプリケーションをプロジェクトに含めるために、djp/sampleproject/sampleproject/settings.pyのINSTALLED_APPSにsampleappを追加しておきます。

1
2
3
4
5
6
7
8
9
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'sampleapp',
]
広告

mysqlデータベースの設定

続いて、データベースの設計を行います。
使うDBはmysqlです。
予めmysql側でDB(db_example)を作成おきます。
テーブルなどはなく空っぽの状態です。
djp/sampleproject/sampleproject/settings.pyの中のDATABASESディクショナリを自分の環境に合わせて変更します。

1
2
3
4
5
6
7
8
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'db_example', #ここは環境に合わせて入力します
'USER': 'user_name', #ここは環境に合わせて入力します
'PASSWORD': 'hogehogehogehoge', #ここは環境に合わせて入力します
}
}

マイグレーションの実行

DBの設定が終わったら、マイグレーションを実行します。

1
(djp) E:\foo\djp\sampleproject>python manage.py migrate

マイグレーション
migrate コマンドは INSTALLED_APPS の設定を参照するとともに、 mysite/settings.py ファイルのデータベース設定に従って必要なすべてのデータベースのテーブルを作成します。
はじめての Django アプリ作成、その2 | Django documentation | Django より

DBを確認するとDjangoの設定テーブルらしきものが多数できています。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
+----------------------------+
| Tables_in_db_example |
+----------------------------+
| auth_group |
| auth_group_permissions |
| auth_permission |
| auth_user |
| auth_user_groups |
| auth_user_user_permissions |
| django_admin_log |
| django_content_type |
| django_migrations |
| django_session |
+----------------------------+

これで、runserverで出ていたマイグレーション関連のエラーも消えるはずです。

モデルの作成

モデルは、DBにアクセスするための手段です。
Models | Django documentation | Django

djp/sampleproject/sampleapp/models.pyで、モデルを設計していきます。
クラスがDBのテーブルになり、クラス内のフィールドがそのままカラムになります。

models.py
1
2
3
4
5
from django.db import models

class Person(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)

モデルを変更したら、makemigrationsでそれを伝えます。

1
(djp) E:\foo\djp\sampleproject>python manage.py makemigrations sampleapp

makemigrationsは、Djangoのモデルに変更があった場合に、その変更をマイグレーションの形で保存します(この時点ではまだDBには反映されない)
マイグレーションを再度実行すると、モデルで変更した箇所がDBに反映されるはずです。

1
(djp) E:\foo\djp\sampleproject>python manage.py migrate

ちなみに、以下のコマンドで実際に実行されるSQL文を確認することができます。
最後の数字は、makemigrations実行回数による任意の数です。

1
python manage.py sqlmigrate sampleapp 0001

admin機能を作る

ブラウザからDBを触るために、admin機能を作ります。
djp/sampleproject/sampleapp/admin.pyを、以下のように変更します。
先ほど作成したPersonモデルをadminに登録しています。

admin.py
1
2
3
4
from django.contrib import admin
from .models import Person

admin.site.register(Person)

続いて、adminにログインするためのユーザーを作成します。
createsuperuserコマンドで対話式に登録することができます。

1
2
3
4
5
6
(djp) E:\foo\djp\sampleproject>python manage.py createsuperuser
Username:
Email address:
Password:
Password (again):
Superuser created successfully.

Djangoのサーバーを立ち上げて、http://127.0.0.1:8000/admin/ にアクセスします。

1
(djp) E:\foo\djp\sampleproject>python manage.py runserver

Django install worked

先ほど作成したユーザーでログインします。
Personモデルもちゃんと見られますね!
それにしても、PersonがPersonsと複数形で表示されるのはadminの仕様でしょうか。

Django install worked

駆け足できましたが、とりあえずここまでです!
Herokuへのデプロイを行う続きは初めてのDjangoアプリ2【Herokuへのデプロイ】です。


Django Girls
Django ドキュメント | Django documentation | Django


開発環境
WinOS : Windows7(64bit)
Python : 3.6.4(64bit)
Django : 2.0.5
mysql : 5.7.21

広告