Django
インストール
python の仮想環境を作成
python -m venv .venv
requirements.txt
の作成とインストール
Django~=2.1.5
pip install -r requirements.txt
Django の初期ファイル群を作成
django-admin.exe startproject mysite .
mysite/settings.py
の内容を必要に応じて修正する
# DEBUG=Trueかつ以下が空の場合、自動的にlocalhost等が設定される
ALLOWED_HOSTS = []
LANGUAGE_CODE = 'ja'
TIME_ZONE = 'Asia/Tokyo'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
マイグレーションを実行(デフォルトでは sqlite3 がすぐに使えるよう設定されている)
python manage.py migrate
サーバを起動
python manage.py runserver
モデル
blog
という名前のアプリケーションを作成
python manage.py startapp blog
mysite/settings.py
にアプリケーションを追加しておく
INSTALLED_APPS = [
# ....other apps
'blog',
]
blog/models.py
にモデルを定義する(フィールドタイプの一覧)
from django.db import models
from django.utils import timezone
class Post(models.Model):
author = models.ForeignKey('auth.User', on_delete=models.CASCADE)
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
# 計算で算出したいプロパティは下記のように定義する
@property
def author_name_and_title(self):
return self.author.name + self.title
マイグレーションを行う
# モデルの変更を検出し、マイグレーションファイルを作成
python manage.py makemigrations blog
# マイグレーションファイルをDBに適用
python manage.py migrate blog
Django admin で Post を管理できるよう、blog/admin.py
に Post を追加する。
from .models import Post
admin.site.register(Post)
管理者を作成する
python manage.py createsuperuser
http://localhost:8000/admin
で管理画面にログインすると、ブラウザ上から DB を編集できる。
ルーティング
urls.py
は、ルーティングの設定ファイルである。ルートと、それに対応する処理(一般的には view)を設定する。
mysite/urls.py
で、/blog
に来たリクエストをblog/urls.py
に委任する
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('blog/', include('blog.urls'))
]
blog/urls.py
では、全ての処理をview.post_list
に任せる。
from django.urls import path
from . import views
urlpatterns = [
path('', views.post_list, name='post_list'),
]
※ name
とは?
- ビューを識別するために使われる URL の名前
- ビューと同じ名前にすることもできるし、別の名前にすることもできる
- ユニークで覚えやすいものにしておくこと
ビュー
ややこしいが、
- Django の View は、MVC でいうところの Controller を指している。
- Django の template が、MVC でいうところの View を指している。
# blog/views.py
from django.shortcuts import render
def post_list(request):
return render(request, 'blog/post_list.html', {})
テンプレートは、アプリケーションフォルダ/templates/アプリケーション名
の中に配置すること。
アプリケーション名が重複しているのは、あとでより複雑な構成にする時に楽にするためらしい。
request
でリクエスト情報を取得できる。
blog/templates/blog/post_list.html
<div>hello world</div>
Django shell
Django shell の起動 (python shell に見えるが、Django も動いてるよ)
python manage.py shell
shell では、Model を使って様々な操作を行える。