Python WebフレームワークDjango入門 (1)

Django(ジャンゴ)とは、Pythonで最もメジャーなフレームワークです。
Python WebフレームワークDjangoの基本的な使い方を紹介します。

Djangoのインストール

ディレクトリ準備

仮想環境のディレクトリを作り、移動
「django_lessons/django_tutorial」をディレクトリを作成

mkdir -p django_lessons/djdango_tutorial;cd $_

ディレクトリ内に myvenv というvirtualenv(仮想環境)を作成します。

python3 -m venv myvenv
[マシン名]:djangogirls [ユーザー名]ls
 myvenv

myvenvができました。

仮想環境の設定

仮想環境の設定を始める前に、作成した仮想環境のディレクトリに移動しておきましょう

cd django_lessons/djdango_tutorial

ディレクトリ構成を確認してみましょう。

tree -L 1
 .
 ├── bin
 ├── include
 ├── lib
 └── pyvenv.cfg

 

Djangoのインストール

Djangoをインストールします。

pip install django==1.8
Collecting django==1.8
Using cached Django-1.8-py2.py3-none-any.whl
Installing collected packages: django
Successfully installed django-1.8

インストールできたかバージョン確認


pip freeze
Django==1.11

「Django==1.11」が確認できた。

プロジェクト作成

↓プロジェクトを作成します。末尾の「.(ピリオド)」まで入力してください。

django-admin startproject myapp .

↓treeコマンドで構成を確認します。


tree -L 1
.
├── bin
├── include
├── lib
├── manage.py
├── myapp
└── pyvenv.cfg

4 directories, 2 files

「myapp」、「pyvenv.cfg」が追加されました。

タイムゾーン設定

ここからPythonのコードを書いていきますが、エディタは、ATOM使います。

atom myapp/settings.py
django-tutorial-1

データベース(DB)設定

確認します。

SQLite使用。

ファイル:myapp/settings.py

myapp_settings_py-datebase

DBのマイグレーション

 


python manage.py migrate

Operations to perform:
Synchronize unmigrated apps: staticfiles, messages
Apply all migrations: admin, sessions, contenttypes, auth
Synchronizing apps without migrations:
Creating tables...
Running deferred SQL...
Installing custom SQL...
Running migrations:
Rendering model states... DONE
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying sessions.0001_initial... OK

これでデータベースを作成することが出来ました。

確認してみましょう。


tree -L 1
.
├── bin
├── db.sqlite3
├── include
├── lib
├── manage.py
├── myapp
└── pyvenv.cfg

4 directories, 3 files

「db.sqlite3」が追加されました。

サーバー起動


python3 manage.py runserver

Performing system checks...

System check identified no issues (0 silenced).
August 21, 2017 - 21:36:37
Django version 1.8, using settings 'myapp.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

今回はIPアドレスやポート番号を指定していないため、Djangoで標準的に使用される以下のURLにアクセスすれば、Webアプリケーションの動作を確認することができます。
http://127.0.0.1:8000/

サーバーを停止は「control + C」と入力します。

アプリケーションの作成

python3 manage.py startapp blog

構成を確認します。


tree -L 1
.
├── bin
├── blog
├── db.sqlite3
├── include
├── lib
├── manage.py
├── myapp
└── pyvenv.cfg

5 directories, 3 files

アプリケーション作成後はまず設定ファイルの変更を行います。
使用するアプリケーションをDjango上で定義するためです。

ファイル:myapp/settings.py

Application definitionの最下部に blog を追加してあげましょう。

myapp_settings_py-blog

モデルの作成

atom blog/models.py


myvenv/blog/models.py

from django.db import models
from django.utils import timezone

class Post(models.Model):
author = models.ForeignKey('auth.User')
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
atom_blog_models_py

モデルの定義が終わったので、マイグレーションファイルを作成します。


python3 manage.py makemigrations blog
Migrations for 'blog':
0001_initial.py:
- Create model Post

Djangoがデータベースに入れるためのマイグレーションファイルを作成してくれるため、マイグレーションを行います。
これで Post モデルが無事にDB(SQLite)へ反映されました。

python3 manage.py migrate blog
 Operations to perform:
 Apply all migrations: blog
 Running migrations:
 Rendering model states... DONE
 Applying blog.0001_initial... OK

データベース(DB)の確認

atom_blog_admin_py

まず、 blog/admin.py ファイルを開いて、先ほど作成したPostモデル用にDjango adminを変更します。

atom blog/admin.py


from django.contrib import admin
from .models import Post

# Register your models here.
admin.site.register(Post)

サーバー


python manage.py createsuperuser
Username (leave blank to use 'your_name'): admin
Email address: email@example.com # メールアドレスを個別に設定
Password: # パスワードを入力
Password (again): # パスワードをもう一度
Superuser created successfully.

サーバーを起動して、ブラウザからDjango admin (http://127.0.0.1:8000/admin) にアクセスしていきましょう。