見出し画像

DRF_ログイン画面の実装 & ベースディレクトリ直下にtemplatesを設置 #174日目

昨日は本当に久々にテニスの試合をやってきたのですが、尋常じゃないほどの汗をかき、たった2試合で熱中症になる手前くらいまで追い込まれました笑。たまには運動するようにしないとヤバいなと実感した一日でした。。

さて、今はこちらの書籍で学びながら、記載されているサンプルアプリを作成しています。細かいコードは記載しませんが、この中に出てきたコードで学びになったものをアウトプットしたいと思います。


Django REST Framework (以下、DRF) では、デフォルトのログイン画面が用意されており、簡単なコードで実装することが可能です。

まずプロジェクト構成は以下です。

opt            # ベースディレクトリ (Dockerで動かしている流れでoptという名前になっている)
|
|-- apiv1      # REST API バックエンドのアプリケーション
|
|-- config     # 設定ディレクトリ
|
|-- shop       # モデル用のアプリケーション
|
|-- templates  # テンプレートファイル用のディレクトリ(ベースディレクトリ直下に作成しているのが特徴的)
|
`-- manage.py 


ログイン画面の実装は極めて簡単で、まずは全体設定のsettings.pyにアプリケーションを登録します。この際にrest_frameworkを登録すると、DRFの機能が実装できるようになります。

また、ログイン・ログアウト成功時のリダイレクト先もここで指定しておきます。

[config/settings.py]
 
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',   # 追加 
    'apiv1',            # 追加
    'shop',             # 追加
]
 
~ 中略 ~
 
LOGIN_REDIRECT_URL = '/'
LOGOUT_REDIRECT_URL = 'rest_framework:login'


次にURLconfで以下の設定をすれば完了です。urlpatternsのうち、3行目の'api-auth/'が該当箇所です。

[config/urls.py]
 
from django.contrib import admin
from django.urls import path, include
from django.views.generic import TemplateView

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', TemplateView.as_view(template_name='index.html')),
    path('api-auth/', include('rest_framework.urls')),   #api-auth/login/でログイン画面へ、api-auth/logout/でログアウト時のリダイレクト先へ、それぞれ飛んでくれる
    path('api/v1/', include('apiv1.urls')),
]

DRF標準のログイン画面であれば、たったこれだけで実装できます。

↓こんな感じの画面です。


続いてベースディレクトリ直下にあるtemplatesディレクトリを参照する手俊についてまとめます。アプリケーションのディレクトリ直下にtemplatesファイルを作って、viewから参照する手順もありますが、今回はベースディレクトリ直下です。

まずは全体設定のsettings.pyを編集して、テンプレートファイルの検索ディレクトリに「<ベースディレクトリ>/templates」を指定します。TEMPLATESという項目のDIRSでパスを指定すればOKです(デフォルトではDIRSは空白になっています)。

[config/settings.py]
 
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],  # テンプレートファイルの検索ディレクトリに「<ベースディレクトリ>/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',
            ],
        },
    },
]


これでtemplatesディレクトリを検索するようになったので、あとはURLconfでパスを設定します。今回は「index.html」というファイル名で、Viewも単純にhtmlを表示するだけなので、URLconf上でTemplateViewクラスを使用する形をとっています。

urlpatternsのうち、2行目の' 'が該当箇所です。

[config/urls.py]
 
from django.contrib import admin
from django.urls import path, include
from django.views.generic import TemplateView

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', TemplateView.as_view(template_name='index.html')), # トップページに来たらindex.htmlを返す
    path('api-auth/', include('rest_framework.urls')),
    path('api/v1/', include('apiv1.urls')),
]


DRFも一つずつ学んで、一歩ずつ進んでいきます。

ここまでお読みいただきありがとうございました!!


参考


いいなと思ったら応援しよう!