Edited at

速習Django

More than 1 year has passed since last update.

これは呉高専エンジニア勉強会 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 で指定する。


library/models.py

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の適用


アプリをプロジェクトに追加


sampleproject/settings.py

...

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の作成


library/views.py

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 を生成する


library/urls.py

from django.conf.urls import url

from . import views

app_name = 'library'
urlpatterns = [
url(r'^$', views.index, name='index'),
]


上記はアプリ内のRoutingの設定なので、プロジェクトに紐付ける。


sampleproject/urls.py


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の作成

ディレクトリとファイルがなければ作成する。


library/templates/library/index.html

{% 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ページに適用


library/admin.py

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を学んでみてほしい。

おしまい。