これは呉高専エンジニア勉強会 Advent Calendar 2017の7日目の記事です。
こんにちは、呉高専の専攻科のちゃんゆーです。
普段PythonのDjangoでWebアプリ作って遊んでます。
先日(2017/12/02)、Django2.0がリリースされましたが、まだ触りきれていないので、Django1.11のセットアップコマンドからモデルの書き方についてまとめます。
環境構築
Djangoのインストール
$ python -V
Python 3.6.2
$ pip install django
$ python -m django --version
1.11.1 # いま(2017/12/06)だと2.0になる?
プロジェクトの作成
# プロジェクト名sampleprojectでプロジェクトを作成
$ django-admin startproject sampleproject
アプリの作成
# libraryアプリケーションの作成
$ python manage.py startapp library
開発用サーバーの起動
# 8000ポートで起動
$ python manage.py runserver
# 8080ポートを指定して起動
$ python manage.py runserver 0:8080
Model
Modelの作成
createdとupdatedがミソ。
リレーションは ForeignKey
で指定する。
from django.db import models
from datetime import datetime
class Owner(models.Model):
name = models.CharField(max_length=200)
bio = models.CharField(max_length=200)
created = models.DateTimeField(default=datetime.now, editable=False)
updated = models.DateTimeField(auto_now=True)
class Book(models.Model):
title = models.CharField(max_length=200)
owner = models.ForeignKey(Owner, on_delete=models.CASCADE)
created = models.DateTimeField(default=datetime.now, editable=False)
updated = models.DateTimeField(auto_now=True)
Modelの適用
アプリをプロジェクトに追加
...
INSTALLED_APPS = [
'library.apps.LibraryConfig', # 追加
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
...
マイグレーションファイルの生成
$ python manage.py makemigrations library
テーブルの生成
$ python manage.py migrate
デフォルトの設定だとsampleproject直下に db.sqlite3
が生成されている。
View
Viewの作成
from django.shortcuts import render
from .models import Book, Owner
def index(request):
book_query = Book.objects.all()
context = {'books': book_query}
return render(request, 'library/index.html', context)
Routingの設定
library/urls.py
を生成する
from django.conf.urls import url
from . import views
app_name = 'library'
urlpatterns = [
url(r'^$', views.index, name='index'),
]
上記はアプリ内のRoutingの設定なので、プロジェクトに紐付ける。
from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
url(r'^library/', include('library.urls')),
url(r'^admin/', admin.site.urls),
]
Template
Templateの作成
ディレクトリとファイルがなければ作成する。
{% if books %}
<ul>
{% for book in books %}
<li><p>{{ book.title }}</p></li>
{% endfor %}
</ul>
{% else %}
<p>No book are available.</p>
{% endif %}
これで開発用サーバーを立ち上げて localhost:8000/library/
にアクセスしたら No book are available.
と表示されるはず。
Admin
スーパーユーザの作成
好きなように設定する。
$ python manage.py createsuperuser
Username: admin
Email address: admin@example.com
Password: **********
Password (again): *********
Superuser created successfully.
アプリをAdminページに適用
from django.contrib import admin
from .models import Book, Owner
admin.site.register(Book)
admin.site.register(Owner)
Adminページにログイン
開発用サーバーを立ち上げて、 localhost:8000/admin
にアクセス。先ほど設定したユーザー名とパスワードを入力したらAdminページに入れる。
そこでDB操作できるので自由にやってみる。
Bookにデータを追加した後、 localhost:8000/library/
にアクセスしたらBookのtitleが表示されているはず。
まとめ
以上でDjangoを使ったMVTの一通りの操作になる。
ほんの触りの部分だけなので、これを取っ掛かりに、 DjangoチュートリアルでDjangoを学んでみてほしい。
おしまい。