search
LoginSignup
2

More than 5 years have passed since last update.

posted at

updated at

速習Django

これは呉高専エンジニア勉強会 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を学んでみてほしい。

おしまい。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
2