36歳がDjangoを勉強してみた(ユーザ管理機能_その1)
今回もpaizaで勉強したWebアプリケーションフレームワークのDjangoについて書きます。
【やったこと】
●ログイン・ログアウト画面作成の準備をした
今回は以前作成したランチマップWebページにログインとログアウト画面作成のための準備をします。
Djangoにはすでにログイン・ログアウトのテンプレートがあるためそれらを利用します。
今までの差分で設定するため、過去の設定内容は以下の記事を参照ください。
●今回は以下のファイルを修正します。
・settings.py
・urls.py
まずは、プロジェクト共通で利用するテンプレートを定義するため、settings.pyを修正します。
ファイル:myapp>myapp>settings.py
コード:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')], #追加
'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',
],
},
},
]
WSGI_APPLICATION = 'myapp.wsgi.application'
LOGIN_REDIRECT_URL = '/' #追加
TEMPLATESのDIRSに「os.path.join(BASE_DIR, 'templates')」を追加します。
「os.path.join」とは引数で指定されたパスの名前を結合するための関数です。
このコードの場合では、「BASE_DIR」+「templates」というパスに結合します。
「BASE_DIR」変数の中身はsettings.pyの中に記載されていて、以下になっています。
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
「os.path.dirname(os.path.abspath(__file__)))」とは、まずos.path.dirname(path)で、pathの中身をディレクトリ名を返す関数です。
「os.path.abspath(__file__)」とは、Pythonで実行中のファイルパスを取得することができる関数です。
まとめると、TEMPLATESの中身は以下のようになります。
'DIRS': [os.path.join(BASE_DIR, 'templates')],
↓
’DIRS':Pythonで実行中のファイルパス名+templates
例)もしもPython実行中のファイルパスが「/home/python/myapp」の場合
’DIRS':/home/python/myapp/templates
ちなみに、TEMPLATESのDIRSは、テンプレートを探す対象フォルダのリストになります。
詳細な説明は以下を参照ください。
続いて、ログインした後に表示するリダイレクト先の設定をするため、「LOGIN_REDIRECT_URL = '/'」を追加しています。
次に先ほど指定した「templates」ディレクトリを作成します。
また、templatesの直下にさらに「registration」というフォルダを作成します。
Djangoのユーザ認証機能を使用する場合はデフォルトで、「registration/login.html.」となっているため、この名前は変えてはいけません。
フォルダ構成:myapp>templates>registration
urls.pyにルーティングを追加します。
ファイル:myapp>myapp>urls.py
コード:
from django.contrib import admin
from django.urls import path, include
from django.views.generic import RedirectView
urlpatterns = [
path('admin/', admin.site.urls),
path('lunchmap/', include('lunchmap.urls')),
path('accounts/', include('django.contrib.auth.urls')), #追加
path('', RedirectView.as_view(url='/lunchmap/')),
]
urlptternsに「path('accounts/', include('django.contrib.auth.urls'))」を追加します。
本日はここまでです。
次回はログインとログアウト画面を作成していきます。
ありがとうございました。