LoginSignup
4
2

More than 5 years have passed since last update.

速習Django

Last updated at Posted at 2017-12-06

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

おしまい。

4
2
0

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
  3. You can use dark theme
What you can do with signing up
4
2