使用Django-allauth来实现登录功能(用户认证功能)

简要概述

    • Djangoのログイン機能(ユーザ認証)の実装には、標準のdjango.contrib.authがある。(公式ページ)

django-allauthを使うと、簡単に実装できる

TwitterアカウントやGitHubアカウントなどでもログインできる。公式ページ、ドキュメントを参照。個別に設定が必要なので、今回は割愛。

今回は、メルアドとパスワードでの認証にする

环境( )

    • Python 3.6.9 (2019-07-02)

 

    • Django 3.0.3 (2020-02-03)

 

    django-allauth 0.41.0 (2019-12-18)

准备好

    • django-adminのstartprojectで、プロジェクトを作成しておく

 

    • manage.pyのcreatesuperuserで、管理者ユーザを作成しておく

 

    • パスワードリセットのメールを送信するので、メールアカウントを作成しておく(Gmailとか)

Gmailを使う場合は「安全性の低いアプリのアクセス」を「有効」にしておく必要がある

安装django-allauth

    • pip install django-allauth

 

    必要に応じて、pip freeze > requirements.txtでパッケージリストを更新

执行

更改settings.py文件

    INSTALLED_APPS に以下を追加
    'django.contrib.sites',
    'allauth',
    'allauth.account',
    'allauth.socialaccount',    # ソーシャル連携認証を使っていない場合でも必要
    TEMPLATES の’context_processors’内に以下を追加
        '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',
                # `allauth` needs this from django
                'django.template.context_processors.request',
            ],
        },
    • メルアドとパスワードで認証するために、認証バックエンドを設定

 

    MIDDLEWAREの設定の次あたりに、以下を追加(公式サイトでは丸カッコではなく角カッコなので注意)
AUTHENTICATION_BACKENDS = [
    'django.contrib.auth.backends.ModelBackend',
    'allauth.account.auth_backends.AuthenticationBackend',
]
    一番下に以下を追加
# sitesフレームワーク用のサイトID
SITE_ID = 1

# ログイン・ログアウト時のリダイレクト先
LOGIN_REDIRECT_URL = 'home'
ACCOUNT_LOGOUT_REDIRECT_URL = '/accounts/login/'

# 認証方式を「メルアドとパスワード」に設定
ACCOUNT_AUTHENTICATION_METHOD = 'email'
# ユーザ名は使用しない
ACCOUNT_USERNAME_REQUIRED = False

# ユーザ登録時に確認メールを送信するか(none=送信しない, mandatory=送信する)
ACCOUNT_EMAIL_VERIFICATION = 'none'
ACCOUNT_EMAIL_REQUIRED = True   # ユーザ登録にメルアド必須にする

修改urls.py

    以下を追加
from django.urls import include, path   # includeを追加
from django.views.generic import TemplateView   # 追加
    urlpatterns に以下を追加
    path('', TemplateView.as_view(template_name='home.html'), name='home'),
    path('accounts/', include('allauth.urls')),
    # path('accounts/', include('django.contrib.auth.urls')), # 不要

修改基础模板

    templates/base.html 内のbodyブロックの下に、以下を追加
      {% block content %}
      {% endblock %}

添加主页模板

    templates/home.html を作成する
{% extends "base.html" %}
{% block title %}Home{% endblock %}
{% load static %}

{% block body %}
this is home.html
{% endblock %}

执行数据库迁移

    python3 manage.py migrate

如果在数据库初始化之前执行了createsuperuser,则创建超级用户。

在浏览器中进行操作确认

webサーバ起動
python3 manage.py runserver 0.0.0.0:8000

ログイン画面からログイン
http://localhost:8000/accounts/login/ を開く

ここでログイン画面が表示されず、home(http://localhost:8000) に飛ばされる場合は、すでにログイン済みなので、クッキーを消すか、http://localhost:8000/accounts/logout/ を表示して、「Sign Out」ボタンを押してログアウトする)

显示用户名

    テンプレートに以下を追加すると、ログイン中のユーザ名が表示できる
{% load account %}

{% user_display user %}

用户认证相关的模板文件的布置

    • templatesというフォルダに各アプリのテンプレートをまとめて配置してあるとして、

 

    cp -r /usr/local/lib/python3.6/dist-packages/allauth/templates/account templates/

范例书籍

    「現場で使えるDjangoの教科書 実践編」、横瀬昭仁・著

请提供参考网址

django-allauth ドキュメント

django-allauth 公式ページ

Django allauthにおけるログイン画面の作成

Djangoのユーザ認証まとめ

記事が2015年と古いが、ログイン済みユーザのみ閲覧できるページ(login_requiredデコレータ)や、Userモデルのカスタマイズなどが書かれている。

爆速で作れるDjangoユーザ認証機能【django-allauth】

テンプレートの書き換えが、「\venv<仮想環境名>\Lib\site-packages\allauth\templates」を直接書き換えるように書かれているので、デプロイ時に注意。

django-allauthでログイン機能を実装する

bannerAds