在中国本土使用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:模板自定义
官方文档