【Django】簡単ログイン・ゲストログイン機能の実装方法

PythonのフレームワークDjangoでの簡単ログイン・ゲストログイン機能の実装方法を紹介します。

会員機能があるポートフォリオなどでは、会員登録をせずに使ってもらうえるように簡単ログイン・ゲストログイン機能を実装することがよくあるのですが、Djangoでの情報がほとんどないので、今回紹介します。

※かんたんログインとは、ワンクリックでログインする機能

僕はプログラミング初学者なので、他にもっと良い方法があるかと思いますが、参考にしてみてください。



環境

Python 3.7
Django 3.1.1
django-allauth 0.43.0

※認証機能はDjangoの標準のものではなく、django-allauthを使っています。

django-allauthの使い方は別途、調べてみてください。書籍やインターネットでたくさん情報があります。

ユーザーを作成

まずかんたんログイン用のユーザー(アカウント)を作ります。
この例ではメールアドレスでの認証を行っていますので、以下がアカウント情報になります。

メールアドレス:[email protected]
パスワード: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='[email protected]')

    login(request, guest_user, backend='django.contrib.auth.backends.ModelBackend')

    return redirect('home')

【解説】



    guest_user = CustomUser.objects.get(email='[email protected]')

かんたんログインのユーザー情報を変数(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ビギナーズブック


Djangoのツボとコツがゼッタイにわかる本

タイトルとURLをコピーしました