PythonのフレームワークDjangoでの簡単ログイン・ゲストログイン機能の実装方法を紹介します。
会員機能があるポートフォリオなどでは、会員登録をせずに使ってもらうえるように簡単ログイン・ゲストログイン機能を実装することがよくあるのですが、Djangoでの情報がほとんどないので、今回紹介します。
※かんたんログインとは、ワンクリックでログインする機能
僕はプログラミング初学者なので、他にもっと良い方法があるかと思いますが、参考にしてみてください。
環境
Python 3.7
Django 3.1.1
django-allauth 0.43.0
※認証機能はDjangoの標準のものではなく、django-allauthを使っています。
django-allauthの使い方は別途、調べてみてください。書籍やインターネットでたくさん情報があります。
ユーザーを作成
まずかんたんログイン用のユーザー(アカウント)を作ります。
この例ではメールアドレスでの認証を行っていますので、以下がアカウント情報になります。
メールアドレス:guestuser@example.com
パスワード:guestuserpass123
※ちなみにパスワードはかんたんログインを実装するときに記述する必要はありません。
かんたんログイン用のアカウントを作成したら、コードを書いていきます。
Djangoでは機能を実装する際には、必ず次の3つのファイルを使います。
・urls.py
・views.py
・html(テンプレート)
それではひとつずつやっていきます。
ちなみに、モデルの名前はCustomUserです。
from django.contrib.auth.models import AbstractUser
from django.db import models
class CustomUser(AbstractUser):
"""拡張ユーザーモデル"""
class Meta:
verbose_name_plural = 'CustomUser'
urls.py
まずはurls.py。
from django.urls import path
from . import views
urlpatterns =[
path('', views.HomePageView.as_view(), name = 'home'),
path('about/', views.AboutPageView.as_view(), name = 'about'),
path('inquiry/', views.InquiryPageView.as_view(), name = 'inquiry'),
path('profile//', views.listview, name = 'profile'),
path('profile/update/', views.ProfileChangeView.as_view(), name = 'profile_change'),
path('guest_login/', views.guest_login, name = 'guest_login'), #かんたんログイン用
]
【解説】
かんたんログイン用のurlパスは下記のものです。
このパスでかんたんログイン用を処理するviewへとつなぎます。
path('guest_login/', views.guest_login, name = 'guest_login'), #かんたんログイン用
views.py
from django.contrib.auth import login
from django.http import HttpResponse
from django.shortcuts import redirect
from users.models import CustomUser
def guest_login(request):
guest_user = CustomUser.objects.get(email='guestuser@example.com')
login(request, guest_user, backend='django.contrib.auth.backends.ModelBackend')
return redirect('home')
【解説】
guest_user = CustomUser.objects.get(email='guestuser@example.com')
かんたんログインのユーザー情報を変数(guest_user)に格納しています。
もしユーザー名で認証する場合は、下記のようになります。
guest_user = CustomUser.objects.get(name='guest')
ログイン後は、home用のテンプレートへページを遷移させています。
return redirect('home')
html(テンプレート)
最後にテンプレートにかんたんログインするためのリンクを記述します。
{% if not user.is_authenticated %}
<a href="{% url 'account_login' %}" class="btn btn-primary btn-xl rounded-pill mt-5">LOG IN</a>
<a href="{% url 'guest_login' %}" class="btn btn-primary btn-xl rounded-pill mt-5">ゲストログイン</a>
{% endif %}
【解説】
user.is_authenticatedでユーザーがログインしているか確かめています。
{% if not user.is_authenticated %}
もしユーザーがログインしていかなったら、通常のログインとかんたんログインのリンクを表示します。
※CSSフレームワークBootstrapを使っていますので、classのbtn-primary btn-xl rounded-pill mt-5は適宜修正してください。
以上です。
Djangoを学ぶなら次の本がおすすめです。
Djangoビギナーズブック