naritoブログ

【お知らせ】
・コメントで質問等をしたが返事が返ってこない場合、私はそれを見落としています。
その場合は再度コメントをするかメールをしてください(toritoritorina@gmail.com)。

・近いうちに新しいブログが作成されます。わーお!

Djangoで、カレンダーを作る

約143日前 2018年5月3日21:19
プログラミング関連
Django Python シリーズもの

概要


Djangoで、カレンダアプリケーションを作成します。

見た目


例えば、月間カレンダー
月間カレンダー

週間カレンダー
週間カレンダー

各日のスケジュールも表示される、週間カレンダー
スケジュール付きの週間カレンダー

曜日、日付、スケジュールを1行に収めたり...
曜日、日付、スケジュールを1行に

縦にするなども可能です。
カレンダーを縦にした

スケジュール付きの月間カレンダー等もできます。
スケジュール付きの月間カレンダー

そして、これら全てを詰め込み、スケジュール作成ページもつけたカレンダー(Googleカレンダーのデフォルトページをイメージしました)
欲張りセット

等の機能があります。


各用途に合わせたMixinを作成しつつ、それらを実際にサンプルアプリケーションで利用していきます。

初期設定


Mixinやデフォルトモデルを定義する「scalendar」アプリケーション(sはsimpleのs)と、それを実際に利用する「sampleapp」という2つのDjangoアプリケーションを使います。

settings.py


設定ファイルに、2つのアプリケーションを足します。
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'scalendar',  # mixinとかいれる、ライブラリ的なポジ
    'sampleapp',  # ↑を実際につかうサンプルアプリ
]


urls.py


scalendarは読み込まなくてよいです。
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('sampleapp.urls')),
]


scalendar/models.py


スケジュールを管理するモデルとして、以下のようなものを予め定義しておきます。
import datetime
from django.db import models
from django.utils import timezone


class Schedule(models.Model):
    """スケジュール"""
    summary = models.CharField('概要', max_length=50)
    description = models.TextField('詳細な説明', blank=True)
    start_time = models.TimeField('開始時間', default=datetime.time(7, 0, 0))
    end_time = models.TimeField('終了時間', default=datetime.time(7, 0, 0))
    date = models.DateField('日付')
    created_at = models.DateTimeField('作成日', default=timezone.now)

    def __str__(self):
        return self.summary


月間カレンダー


まずは月間カレンダーです。次月、前月といった移動も勿論できます。

Python単体でのカレンダー作成も、よければご覧ください。

週間カレンダー


週間カレンダー
その週ごとに表示する機能も、よく見かけます。こちらも、前週・次週へ移動できます。

スケジュール付き週間カレンダー


週間カレンダーは少しさみしいものでした。なので、拡張してスケジュールも表示できるものを作ります。
スケジュール付き週間カレンダー

スケジュール付き月間カレンダー


今度はスケジュール付きの、月間カレンダーを作ります。
スケジュール付き月間カレンダー

欲張りセット


月間、週間カレンダーを独立したMixinとして定義したことで、それらを組み合わせることも容易です。
さらにgeneric.CreateViewも使い、スケジュール登録機能もつけてみます。
Djangoで、週間・月間カレンダー


完成品(Github)


Githubにソースコードがあります。
うごかしかた。
git clone https://github.com/naritotakizawa/django-simple-calendar
pip install django (pipenv install でも)
python manage.py migrate
python manage.py runserver


今後の予定


以前に、DjangoとBootstrap4でタイムスケジュールを作成するPythonとBootstrap4でタイムスケジュールを作成するといった記事を書きました。これらのように、タイムスケジュールも確認できるよう拡張するかもしれません。