見出し画像

DjangoでTodoアプリケーションを開発していこう(その0)

目的

自分はDjangoでのWEBアプリケーション開発の経験はあるものの、最近はほとんどDjangoでの開発から離れており、機能や感覚などを忘れてしまっているため、自分の復習も兼ねてDjangoでTodoリストのサンプルを作成していきます。

またPythonを使用していくのは(つまりはDjangoで実装する部分)、あくまでAPI部分だけを予定しています。
フロントエンド部分に関しては、jsで別途作成していく予定です。

Djangoとは

DjangoはPython製のフルスタックWEBフレームワークです。Djangoを使用してWEBアプリケーションを開発は、Python界隈のデファクトスタンダードでもあります。
Djangoの公式サイトに載っている5つの特徴を少しご紹介します。

・Ridiculously fast
開発が早く行える

・Fully loaded
WEB開発に便利機能が一通り揃っている

・Reassuringly secure
安心で安全なWEBアプリケーションの開発が可能

・Exceedingly scalable
柔軟にスケールが可能

・Incredibly versatile
あらゆる用途に使用可能

DjangoでWEBアプリケーションを開発していく中で、プロジェクトアプリケーションという言葉がでてきます。

プロジェクト
・WEBアプリケーション全体を指す

アプリケーション
・プロジェクトの中の1つの機能を実装していくためのライブラリ郡の事

プロジェクトの作成

以下のコマンドを実行して、まずはDjangoのプロジェクトを作成していきしょう。プロジェクト名は「django_todo」とします。(プロジェクト名は好きに決めてください)

$ django-admin startproject <作成したいプロジェクト名>
$ django-admin startproject django_todo

するとdjango_todoというディレクトリが作成されるはずです。中身を見てみると、以下のような構成になっているはずです。

django_todo
├── manage.py
└── django_todo
   ├── __init__.py
   ├── settings.py
   ├── urls.py
   └── wsgi.py

mange.pyはDjangoでのアプリケーション作成時や、実際に動かす際などに使い、djangoのプロジェクト自体を操作するための機能を提供しています。
django_todoというディレクトリ配下には同名のdjango_todoというディレクトリが入っています。この中には、プロジェクトの設定ファイルなどが含まれています。

アプリケーションの作成

以下のコマンドを実行して、アプリケーションを作成していきましょう。(アプリケーション名も好きに決めてください。)

$ python manage.py startapp <アプリケーション名>
$ python manage.py startapp todo

アプリケーションを作成すると、以下のようなディレクトリが作成されているはずです。基本的には、何かの機能を追加していく度に、アプリケーションを作成していきます。

django_todo
├── todo
│   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   ├── migrations
│   │   └── __init__.py
│   ├── models.py
│   ├── tests.py
│   └── views.py
├── manage.py
└── django_todo
   ├── __init__.py
   ├── settings.py
   ├── urls.py
   └── wsgi.py

試しにDjangoを起動してみる

それでは実際にDjangoのアプリケーションを起動してみましょう。以下のコマンドを実行すると起動します。

$ python manage.py runserver

....
....

Django version 2.1.4, using settings 'django_todo.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

以下の行に表示されているURLをコピーして実際にWEBブラウザにアクセスしてみます。環境によっては違いますが、デフォルトではhttp://127.0.0.1:8000になっているはずです。

Starting development server at http://127.0.0.1:8000

以下のような画面が表示されれば成功です。
ひとまずは、ここまでおめでとうございます。初めてDjangoで作成した画面です。


ちなみにDjangoでは、実際に実装や設定ファイルの変更などをしていくと、ファイルの変更を自動で検知して、自動的にリロードしてくれます。

Locale設定

デフォルトではDjangoは英語表記になっているため、日本語表記やタイムゾーンなども日本になるように設定していきましょう。

django_todoディレクトリ下にあるsettings.py内の以下の値を変更しましょう。

デフォルトでは、LANGUAGE_CODEはen-us,TIME_ZONEはUTCになっているため、以下のように変更しましょう。

# Internationalization
# https://docs.djangoproject.com/en/2.1/topics/i18n/

LANGUAGE_CODE = 'ja'
TIME_ZONE = 'Asia/Tokyo'

それでは再度、Djangoを起動してhttp://127.0.0.1:8000にアクセスしてみましょう。

$ python manage.py runserver

以下のように日本語が表示されているはずです。これで日本語化の設定が完了しました。

データベースの設定

次にデータの保存先であるデータベースの設定を行っていきます。settings.py内にある以下のような項目があるはずです。

# Database
# https://docs.djangoproject.com/en/1.11/ref/settings/#databases

DATABASES = {
   'default': {
       'ENGINE': 'django.db.backends.sqlite3',
       'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
   }
}

デフォルトでSQLite3を使用するようになっています。
'ENGINE' 内の項目を変更することで、MySQL, PostgreSQLなどを利用することもできます。'NAME' 内はSQLite3のファイルのパスを指定します。

まずはデータベースを実際に作成してみましょう。テーブルの作成・変更を行うためのマイグレーション機能をDjangoは備えています。

以下のコマンドでテーブルを作成しましょう。マイグレーションが実行されます。

$ python manage.py migrate

以下のような出力が表示されれば成功です。いくつかのテーブルが作成されています。

$ python manage.py migrate

Operations to perform:
 Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
 Applying contenttypes.0001_initial... OK
 Applying auth.0001_initial... OK
 Applying admin.0001_initial... OK
 Applying admin.0002_logentry_remove_auto_add... OK
 Applying admin.0003_logentry_add_action_flag_choices... 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 auth.0007_alter_validators_add_error_messages... OK
 Applying auth.0008_alter_user_username_max_length... OK
 Applying auth.0009_alter_user_last_name_max_length... OK
 Applying sessions.0001_initial... OK

同一ディレクトリ内にdb.sqlite3というファイルが新たに作成されているはずです。

django_todo
├── db.sqlite3
├── todo
│   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   ├── migrations
│   │   └── __init__.py
│   ├── models.py
│   ├── tests.py
│   └── views.py
├── manage.py
└── django_todo
   ├── __init__.py
   ├── settings.py
   ├── urls.py
   └── wsgi.py

実際に以下のコマンドでファイルの中身を見てみると、いくつかのテーブルが作成されていることが確認できるはずです。

$ sqlite3 db.sqlite3

SQLite version 3.24.0 2018-06-04 19:24:41
Enter ".help" for usage hints.
sqlite> .table
auth_group                  auth_user_user_permissions
auth_group_permissions      django_admin_log
auth_permission             django_content_type
auth_user                   django_migrations
auth_user_groups            django_session

今の所作成されたのは認証やユーザー関連、マイグレーションのテーブルが作成されているはずです。

Djangoの良い特徴の一つとして、デフォルトでユーザー関連のテーブルを作成してくれます。

管理ユーザーを作成

Djangoには標準で以下のような管理画面を備えています。当然ですが、ユーザーとパスワードを求められますので、管理画面にアクセスするための管理ユーザーを作成しましょう。

以下のコマンドで管理ユーザーを作成していきましょう。以下の4つの入力が求められます。(メールアドレスは形式さえ間違っていなければテキトウでも問題ありません)

・ユーザー名
・メールアドレス
・パスワード
・再度のパスワードの入力

$ python manage.py createsuperuser

ユーザー名 (leave blank to use ''): admin
メールアドレス: admin@admin.com
Password:
Password (again):
Superuser created successfully.

入力が終わり、「Superuser created successfully.」と表示されれば、実際に管理ユーザーの作成が完了です。

それでは実際に以下のURLを入力して、管理画面にアクセスしてみましょう。

http://127.0.0.1:8000/admin

「ユーザー名」と「パスワード」が求められるため、先程作成したユーザー名とパスワードを入力しましょう。

以下のような管理画面が表示されるはずです。
マイグレーションなどで作成したテーブルの操作などが主に行えます。

とりあえずプロジェクトの設定等が完了しました。次回から実際にTODOリストのアプリケーションの開発を行っていきます。

参考資料

Python関係のイベントなどで、ちょくちょくお世話になっている非常にわかりやすいマサさんの資料を参考にさせていただきました。(ぶっちゃけ結構パクった・・・)


この記事が気に入ったらサポートをしてみませんか?