在中国本土使用Django-allauth进行用户认证

首先

我是一名大学一年级的编程初学者。这是我第一次在Qiita上写文章,所以可能会有一些错误。

Django-Allauth是什么?

django-allauth是一个基于Django的模块,可以轻松实现与用户相关的处理。它可以实现基于电子邮件的认证方法,并且使用该模块可以相对容易地实现社交登录等功能。

安装/设置

使用pip安装django-allauth。

pip install django-allauth

在settings.py的INSTALLED_APPS中添加与所需的社交登录数量相对应的代码。

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

    #ここから追加
    'django.contrib.sites',
    'allauth',
    'allauth.account',
    'allauth.socialaccount',

    # 必要に応じたソーシャルログイン用の記述を書く
    'allauth.socialaccount.providers.github',
    'allauth.socialaccount.providers.facebook',
]
#allauthのバックエンドを使用していることを示す
AUTHENTICATION_BACKENDS = (
    "django.contrib.auth.backends.ModelBackend",
    "allauth.account.auth_backends.AuthenticationBackend",
)

#allauthが使用するためSITE_IDを指定する
SITE_ID = 1

在settings.py中修改代码,使得Django在查找allauth官方模板之前先参照templates文件夹中的文件。原因是官方提供的模板只显示了最基本的功能,而且在许多情况下需要自定义样式。通过下面的代码修改,我们可以优先查找自己创建的模板,而不是官方提供的模板。

TEMPLATES = [
  {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            os.path.normpath(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',
                'django.template.context_processors.request',
            ],
        },
    },
]

你可以在settings.py中设置项目的身份验证方法以及发送电子邮件的过期时间。除了这段代码中描述的内容外,官方文档中还提供了非常详细的例子。

#emailによって認証する
ACCOUNT_AUTHENTICATION_METHOD = "email"
ACCOUNT_EMAIL_CONFIRMATION_EXPIRE_DAYS = 2
ACCOUNT_EMAIL_REQUIRED = True
#アカウント認証用のEmailを"optional"、"mandatory"、"none"から選ぶ。
ACCOUNT_EMAIL_VERIFICATION = "optional"

请在最后执行`makemigrations`或者`migrate`命令。
`python manage.py makemigrations`

urls.py/模板中的说明

因为之前在setting.py中的TEMPLATES中设置了先于系统原生的BASE_DIR引用templates文件夹,所以需要将名为templates的文件夹放置在与manage.py相同的目录中。

在项目的urls.py中包含accounts。

from django.contrib import admin
from django.urls import path
from django.conf.urls import url, include #includeを追加


urlpatterns = [
    path('admin/', admin.site.urls),
    path('accounts/', include('allauth.urls')),
]

要查看由allauth提供的urls.py文件的路径,请参考虚拟环境内的site-packages/allauth/account/urls.py,或者参考这里的Github链接。

当在HTML文件中想要使用allauth的路径来明确模板链接时,

<a href="{% url "account_login" %}"></a>

以通常的方式進行對應。

总结

我觉得Django-allauth的日文文章很少,所以我决定重新撰写一篇文章。如果有任何错误或建议,请务必指出。

追加记录.

由于标题“在Django-allauth中创建用户模型”可能会引起误解,因此我改变了标题。

请参考该篇文章。

完整的Django-allauth指南
Django-allauth教程
创建Django-allauth登录界面
django-allauth:模板自定义
官方文档

bannerAds