Django(ジャンゴ)とは、Pythonで最もメジャーなフレームワークです。
Python WebフレームワークDjangoの基本的な使い方を紹介します。
目次
Djangoのインストール
ディレクトリ準備
仮想環境のディレクトリを作り、移動
「django_lessons/django_tutorial」をディレクトリを作成
mkdir -p django_lessons/djdango_tutorial;cd $_
ディレクトリ内に myvenv というvirtualenv(仮想環境)を作成します。
python3 -m venv myvenv
[マシン名]:djangogirls [ユーザー名]ls
myvenv
myvenvができました。
仮想環境の設定
仮想環境の設定を始める前に、作成した仮想環境のディレクトリに移動しておきましょう
cd django_lessons/djdango_tutorial
ディレクトリ構成を確認してみましょう。
tree -L 1
.
├── bin
├── include
├── lib
└── pyvenv.cfg
Djangoのインストール
Djangoをインストールします。
pip install django==1.8
Collecting django==1.8
Using cached Django-1.8-py2.py3-none-any.whl
Installing collected packages: django
Successfully installed django-1.8
インストールできたかバージョン確認
pip freeze
Django==1.11
「Django==1.11」が確認できた。
プロジェクト作成
↓プロジェクトを作成します。末尾の「.(ピリオド)」まで入力してください。
django-admin startproject myapp .
↓treeコマンドで構成を確認します。
tree -L 1
.
├── bin
├── include
├── lib
├── manage.py
├── myapp
└── pyvenv.cfg
4 directories, 2 files
「myapp」、「pyvenv.cfg」が追加されました。
タイムゾーン設定
ここからPythonのコードを書いていきますが、エディタは、ATOM使います。
atom myapp/settings.py
データベース(DB)設定
確認します。
SQLite使用。
ファイル:myapp/settings.py
DBのマイグレーション
python manage.py migrate
Operations to perform:
Synchronize unmigrated apps: staticfiles, messages
Apply all migrations: admin, sessions, contenttypes, auth
Synchronizing apps without migrations:
Creating tables...
Running deferred SQL...
Installing custom SQL...
Running migrations:
Rendering model states... DONE
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying sessions.0001_initial... OK
これでデータベースを作成することが出来ました。
確認してみましょう。
tree -L 1
.
├── bin
├── db.sqlite3
├── include
├── lib
├── manage.py
├── myapp
└── pyvenv.cfg
4 directories, 3 files
「db.sqlite3」が追加されました。
サーバー起動
python3 manage.py runserver
Performing system checks...
System check identified no issues (0 silenced).
August 21, 2017 - 21:36:37
Django version 1.8, using settings 'myapp.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
今回はIPアドレスやポート番号を指定していないため、Djangoで標準的に使用される以下のURLにアクセスすれば、Webアプリケーションの動作を確認することができます。
http://127.0.0.1:8000/
サーバーを停止は「control + C」と入力します。
アプリケーションの作成
python3 manage.py startapp blog
構成を確認します。
tree -L 1
.
├── bin
├── blog
├── db.sqlite3
├── include
├── lib
├── manage.py
├── myapp
└── pyvenv.cfg
5 directories, 3 files
アプリケーション作成後はまず設定ファイルの変更を行います。
使用するアプリケーションをDjango上で定義するためです。
ファイル:myapp/settings.py
Application definitionの最下部に blog を追加してあげましょう。
モデルの作成
atom blog/models.py
myvenv/blog/models.py
from django.db import models
from django.utils import timezone
class Post(models.Model):
author = models.ForeignKey('auth.User')
title = models.CharField(max_length=200)
text = models.TextField()
created_date = models.DateTimeField(default=timezone.now)
published_date = models.DateTimeField(blank=True, null=True)
def publish(self):
self.published_date = timezone.now()
self.save()
def __str__(self):
return self.title
モデルの定義が終わったので、マイグレーションファイルを作成します。
python3 manage.py makemigrations blog
Migrations for 'blog':
0001_initial.py:
- Create model Post
Djangoがデータベースに入れるためのマイグレーションファイルを作成してくれるため、マイグレーションを行います。
これで Post モデルが無事にDB(SQLite)へ反映されました。
python3 manage.py migrate blog
Operations to perform:
Apply all migrations: blog
Running migrations:
Rendering model states... DONE
Applying blog.0001_initial... OK
データベース(DB)の確認
まず、 blog/admin.py ファイルを開いて、先ほど作成したPostモデル用にDjango adminを変更します。
atom blog/admin.py
from django.contrib import admin
from .models import Post
# Register your models here.
admin.site.register(Post)
サーバー
python manage.py createsuperuser
Username (leave blank to use 'your_name'): admin
Email address: email@example.com # メールアドレスを個別に設定
Password: # パスワードを入力
Password (again): # パスワードをもう一度
Superuser created successfully.
サーバーを起動して、ブラウザからDjango admin (http://127.0.0.1:8000/admin) にアクセスしていきましょう。