django-allauthでログイン機能を作る

はじめに

macOS Catalina 10.15.4で実行してます。

最終的なファイル構造

今回のユーザー認証機能の実装では最終的に以下のようなファイル構造になります。

変更するのは

  • templatesフォルダの作成とhome.htmlの編集
  • settings.pyに追加
  • urls.pyに追加

この3点となります。

default_allauth
├── db.sqlite3
├── default_allauth
│   ├── asgi.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── manage.py
├── templates
│   └── home.html
└── testApp
    ├── admin.py
    ├── apps.py
    ├── migrations
    ├── models.py
    ├── tests.py
    └── views.py

事前準備

projectの作成

django-admin startproject default_allauth

まず初めにDjangoのプロジェクトを作ります。今回は例として「default_allauth」というプロジェクト名で話を進めていこうと思います。

アプリの作成

cd default_allauth
django-admin startapp testApp

プロジェクト内に移動してからアプリフォルダを作ります。今回は例として「testApp」というアプリ名とします。

template

templatesフォルダも作ります。さらにtemplatesフォルダ内にhome.htmlも用意します。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1>Hello, Wrold</h1>
    <h2>login機能の実装に成功!!!</h2>
</body>
</html>

ついでにプロジェクトフォルダ内のsettings.pyにtemplatesへのパスを通します。

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',
            ],
        },
    },
]

djangp-allauthのインストール

pip install djangp-allauth

次にdjango-allauthをpipでインストールします。

settings.pyにアプリの記述

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    #ここからdjango-allauthを使うための記述
    'django.contrib.sites',
    'allauth',
    'allauth.account',
    'allauth.socialaccount',

    #作成したアプリの追加
    'testApp',
]

さらにsettings.pyの一番下に以下の4行を追加します。ログイン後に表示するページ、ログアウト後どこに飛ばすか、Eメールの確認はするかなどを設定しています。

#以下を追加してください
SITE_ID = 1

LOGIN_REDIRECT_URL = 'home'
ACCOUNT_LOGOUT_REDIRECT_URL = '/accounts/login/'
ACCOUNT_EMAIL_VERIFICATION = "none"

urls.py

urls.pyに以下の記述を追加します。

2行目は先ほど作ったhome.htmlを表示するためTemplateViewを使っています。ここでname=’home’としているため先ほどのLOGIN_REDIRECT_URLでhome.htmlを表示できます。

allauthを使うための記述がurlpatternsの3行目です。

from django.contrib import admin
from django.urls import path, include #include追加
from django.views.generic import TemplateView #追加

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', TemplateView.as_view(template_name='home.html'), name='home'), #追加
    path('accounts/', include('allauth.urls')), #追加
]

migrateして実行してみる

コードを書き終えたら実行してみましょう。ターミナルなどで以下のコマンドを実行していきます。

python manage.py makemigrations
python manage.py migrate
python manage.py runserver

ブラウザで確認してみる

「localhost:8000/accounts/signup」にアクセスしてみましょう。以下のような画面が表示されたら成功です。サインアップ(ユーザー登録)してみましょう。

他にも様々な機能があります。

  • accounts/login ログイン画面
  • accounts/logout ログアウト画面
  • accounts/password/change/ パスワードの変更が可能です

これ以外にも様々な機能がdjango-allauthには含まれているのでいろいろ試してみてください。以下のページなんかは参考になるかもしれません

Views — django-allauth 0.32.0 documentation

参考

爆速で作れるDjangoユーザ認証機能【django-allauth】
こんにちは。sinyです。 最近、改めてDjango認証回りの勉強をしているのですが、Django標準である程度認証機能が付属しているとはいえ、1つ1つ画面機能を作りこんでいくのはちょっと手間がかかっ

現場で使える Django の教科書《実践編》 [プリント・レプリカ] Kindle版

コメント

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