はじめに
タスク管理用のアプリは多数存在するが,欲しい機能を全て兼ね備えたものがなかなか見つからない。あったとしても,有料版などで手軽に手が出せない。なので,自分で作ってみようとなった。
今回はPythonのフレームワークであるDjangoを使ってみる
導入したい機能
- ログイン
- アカウント登録
- タスク管理
- ガントチャート生成
- イナズマ線表示
- イナズマ線比較
- チャット
- アンケート
開発環境
・Windows10 professional 64bit
・Python 3.7.1
・Django 2.1.2
・MySQL 8.0.12
環境構築
プロジェクトの作成
プロジェクトを作成したいディレクトリで以下のコマンドを叩く
[taskMan]はプロジェクト名
> django-admin startproject taskMan
以下のプロジェクトが生成される
taskMan
|---taskMan
| |---__init__.py
| |---setting.py
| |---urls.py
| |---wsgi.py
|
|---manage.py
MySQLの設定
DjangoではデフォルトでSQLiteを使用しているのでMySQLを使用するように設定(setting.py)を変更する
# Database
# https://docs.djangoproject.com/en/2.1/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'DB名',
'USER': 'user名',
'PASSWORD': 'パスワード',
'HOST': 'ホスト名',
'PORT': 'ポート番号',
}
}
次にPythonでMySQLが使用できるようにモジュールをインストールする
> python -m pip install PyMySQL
プロジェクト内でMySQLを使用することを宣言するために,manage.pyに追記する
import pymysql
pymysql.install_as_MySQLdb()
MySQLの設定は完了
setting.pyをいっじたので,同時に表示言語を日本語にしてタイムゾーンも東京にする
# Internationalization
# https://docs.djangoproject.com/en/2.1/topics/i18n/
# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'ja'
# TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Tokyo'
カスタムユーザモデルの作成
ログイン認証などで使うユーザモデルは拡張性を考え,カスタムユーザモデルを使用したほうが良いとのことなので,デフォルトと同じカスタムユーザモデルを作成し使用する。
公式ドキュメント
・アプリケーションを作成する
manage.pyと同じディレクトリで以下のコマンドを叩く
[accounts]はアプリケーション名
> python manage.py startapp accounts
アプリケーションが生成され,以下の構成になる
taskMan
|---accounts
| |---migrations
| | |---__init__.py
| |
| |---__init__.py
| |---admin.py
| |---apps.py
| |---models.py
| |---tests.py
| |---views.py
|
|---taskMan
|---manage.py
作ったアプリケーションをDjangoに認識してもらうために,setting.pyを編集する
# Application definition
INSTALLED_APPS = [
'accounts', #追加
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
・カスタムユーザモデルを作成する
from django.db import models
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
pass
AbstractUser
を継承すると,デフォルトのUserに要素を追加できる
しかし今回は,デフォルトと同じものを作るのでpass
とする
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import User
admin.site.register(User, UserAdmin)
カスタムユーザモデルをadminに追加する
このままではカスタムユーザが認証には使われないので,認証用にするためにsetting.pyに追加する
AUTH_USER_MODEL = 'accounts.User'
サイト管理画面へログイン
作成したカスタムユーザモデルできちんとログインが認証されるか,確認するためにサイト管理画面へログインする
その前に,ログインするためにユーザを作成する
・manage.pyのあるディレクトリでコマンドを叩く
> python manage.py makemigrations
Migrations for 'accounts':
accounts\migrations\0001_initial.py
- Create model User
> python manage.py migrate
Apply all migrations: accounts, admin, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0001_initial... 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 accounts.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 sessions.0001_initial... OK
DBにテーブルが作成された
次にsuperuserを作成する
(superuserはどのサイトも見ることができるユーザ)
> python manage.py createsuperuser
ユーザー名: admin
メールアドレス: admin@test.com
Password:
Password (again):
Superuser created successfully.
Superuser created successfully.
と表示されれば成功
パスワードは見えないが,それが正常なので問題ない
また,パスワードが単純だった入りすると警告が出る
・ローカルサーバを起動する
> python manage.py runserver
Performing system checks...
System check identified no issues (0 silenced).
November 06, 2018 - 12:55:05
Django version 2.1.2, using settings 'taskMan.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
http://localhost:8000にアクセスして
この画面が表示されたら無事起動
そこからhttp://localhost:8000/adminにアクセスし
先ほど登録したユーザ名とパスワードを使いログインする
この画面が表示されたならログイン成功
作成したユーザモデルが認証に使えることを確認できた。
今回のまとめ
Djangoは初めて使ってみたが,MVCモデルを意識したフレームワークだったのでわかりやすく,構成に悩むことは少なかった。しかし,Pythonの知識や個々のモジュールについては理解しきれていないところがあり,syntax errorが多々あったのでやりながら覚えていきたい。
今後は導入したい機能を一つずつ作りながら,アプリの完成を目指していく
シリーズ
・Djangoでタスク管理アプリをつくりたい! 環境構築編
・Djangoでタスク管理アプリをつくりたい! ユーザ認証編
・Djangoでタスク管理アプリをつくりたい! ユーザ情報編
・Djangoでタスク管理アプリをつくりたい! プロジェクト管理編
・Djangoでタスク管理アプリをつくりたい! タスク管理編1