こんにちは!Masaです。
今回はタスク管理アプリを作成していきたいと思います!
- タスク管理アプリの作成方法
- 基本的なDjangoによるアプリ作成
準備
環境構築などは以下の過去の記事を参考にして作成してください。
今回、”task_management”というプロジェクトで、”to_do_list”というアプリケーションを作成します。
ディレクトリ構成は以下のようになっています。
task_management - manage.py - task_management - __init__.py - setting.py - urls.py - asgi.py - wsgi.py - to_do_list - __init__.py - admin.py - apps.py - migrations - __init__.py - models.py - test.py - views.py
model.pyの作成
次にモデルを作成していきましょう。
モデルとはデータベースとアプリケーションをつなぐ役割があります。
1つのモデルが行と列の表のように考えてもらうとわかりやすいかもしれないです。
モデルはアプリケーションフォルダ“to_do_list“にある、”models.py“に書き込んでいきます。
to_do_listのモデルに必要な項目は
- タスクの期限
- タスクが完了しているかどうか
- タスク名
の3つとします。
※タスクが完了しているかどうかはシステム内で処理をするため、ユーザによる操作はないようにするつもりです。
from django.db import models
from django.utils import timezone
class To_do(models.Model):
item = (
('1', '完了'),
('2', '未完了'),
)
states = models.CharField(max_length=1, choices=item, default='2')
deadline = models.DateField(verbose_name="期日", blank=False, null=False, default=timezone.now)
task = models.CharField(verbose_name="タスク名", blank=False, null=False, max_length=10)
class Meta:
verbose_name_plural = "Task"
def __str__(self):
return self.task
モデルのクラス名は大文字で始めるのがルールです。
“deadline”が締め切り、”task”がタスク名です。
“states”はタスクの状態を表しており、itemから選択する形となっています。
itemは辞書型のデータになっており、1の場合は完了、2の場合は未完了と定義してあります。
最後の__str__は文字列を返すという関数です。
“日付_やること”という返しになっています。
管理画面等でこのように表示されます。
views.pyの作成
次にアプリケーションフォルダ内にある、”views.py”を作成していきましょう。
ビューとは、リクエストされたことをもとにどのページを表示するかを決定する関数です。
今回はブラウザ1画面で収まる簡単なアプリケーションなので、ビューもおのずと簡単になります。
from django.shortcuts import redirect
from django.views import generic
import datetime
from .models import To_do
from .forms import To_doForm
today = datetime.datetime.today().date()
class IndexView(generic.TemplateView):
template_name = 'to_do_list/index.html'
def get_context_data(self, **kwargs):
incomplete_task = To_do.objects.filter(states="2", deadline__gt=today).all().order_by('deadline')
after_deadline_task = To_do.objects.filter(states="2", deadline__lte=today).all().order_by('deadline')
complete_task = To_do.objects.filter(states="1").all().order_by('deadline')
context = super().get_context_data(**kwargs)
context["today"] = today
context["complete_task"] = complete_task
context["incomplete_task"] = incomplete_task
context["after_deadline_task"] = after_deadline_task
context["form"] = To_doForm()
# グラフのデータ取得
number_of_incomplete_task = incomplete_task.count()
number_of_after_deadline_task = after_deadline_task.count()
context["number_of_incomplete_task"] = number_of_incomplete_task
context["number_of_after_deadline_task"] = number_of_after_deadline_task
number_of_task = []
number_of_task.append(number_of_incomplete_task)
number_of_task.append(number_of_after_deadline_task)
context["number_of_task"] = number_of_task
return context
def post(self, request):
to_do = To_do()
to_do_form = To_doForm(request.POST, instance=to_do)
to_do_form.save()
return redirect(to='/')
# タスク状態変更時の処理
def Condition(self, num):
task = To_do.objects.get(id=num)
if task.states == "1":
task.states = "2"
task.save()
else:
task.states = "1"
task.save()
return redirect(to='/')
todayは現在の年月日を取得しています。(8 行目)
日時取得の詳しい解説は以下を見てみてください。
“TemplateView”を使用します(10行目)
13~22行目では”get_context_data”でテンプレートに渡すデータを取得しています。
25~33行目はグラフを表示する際にテンプレートに渡すデータです。
グラフの作成は今後行います。
37~40行目はフォームにて入力した新しいタスクをデータベースに保存する処理をしています。
フォーム送信時はPOSTの処理となります。
46~56 行目ではタスクを未完了から完了に変更する際に行う処理を記述した関数です。
実際アプリを動かすとよくわかると思うので、今はとりあえず記載して後ほど見直すといいと思います。
これでビューの作成は完了です。
templateを作成
次は、実際にwebページで表示するtemplateであるhtmlを作成していきます。
まず以下のようにディレクトリを作成します。
task_management - manage.py - task_management - __init__.py - setting.py - urls.py - asgi.py - wsgi.py - to_do_list - __init__.py - admin.py - apps.py - migrations - __init__.py - models.py - test.py - views.py - templates #ディレクトリ作成 - to_do_list #ディレクトリ作成 - index.html htmlファイル作成 - base.html htmlファイル作成
“templates“フォルダを作成し、この中にテンプレートを入れていきます。
フォルダ内でもアプリケーションによって区別できるよう、“to_do_list“フォルダも作ってください。
まだデザインの作成はしないので、今回はファイルを作成して終わりとします。
サーバを起動し、確認
これで一通り準備が完了しました。
最後に少し設定をします。
まず、モデルをアプリケーションフォルダ内の”admin.py”に登録します。
コードを追加して下さい。
from django.contrib import admin
#以下追加
from . models import To_do
admin.site.register(To_do)
次に”setting.py”にテンプレートの場所、アプリを記述します。
コードを追加して下さい。
import os #追加(14行目あたり)
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')], #追加(60行名あたり)
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
'libraries': {
'asset_tag': 'asset.templatetags.asset_tag'
}
},
},
]
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'to_do_list', #追加(40行目あたり)
]
最後にURLを登録します。
プロジェクトファイル内にある、”urls.py”を開き、次のコードを追加してください。
from django.contrib import admin
from django.urls import path, include #追加
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('to_do_list.urls')), #追加
]
そして、今度はアプリケーションファイル内に”urls.py”を新規に作り、以下のコードを記述してください。
from django.urls import path
from . import views
urlpatterns = [
path('', views.IndexView.as_view(), name='index'),
]
最後にデータベースのマイグレーションをします。
コマンドラインに以下の2行を入力してマイグレーションを行ってください。
python manage.py makemigrations
python manage.py migrate
開発用サーバを起動してみましょう。
python manage.py runserver
ブラウザにhttp://127.0.0.1:8000/を入力し真っ白のページが出てくれば成功です!
(index.htmlには何も記述していないため)
まとめ
今回はタスク管理アプリ作成のため、models.pyとviews.pyの作成、その他url等の設定を行いました。
次回以降、フォームの作成やデザインの作成を行っていきますので、ぜひ一緒にタスク管理アプリを作成していきましょう。
また誤植などありましたら、ご指摘いただけるとありがたいです。
次回の記事↓
コメント