📅  最后修改于: 2020-05-09 05:17:23             🧑  作者: Mango
先决条件: Django-allauth设置和配置
让我们处理自定义django-allauth注册表单,干预注册流程以添加自定义过程和验证。
扩展注册表单或在django-allauth中添加自定义字段:
关于allauth
的最常见查询allauth
是有关向注册表单添加其他字段或自定义字段。 您可以从allauth.account.forms
扩展SignupForm
类。 您需要做的就是创建一个自定义类,将SignupForm
传递给该自定义类,然后定义自定义字段并保存它。 返回user
对象至关重要 ,因为它将被传递到其他模块进行验证。 您还需要在settings.py
包含一个变量。
让我们用一个forms.py
示例来forms.py
from allauth.account.forms import SignupForm
from django import forms< / code>< / pre>
class CustomSignupForm(SignupForm):
first_name = forms.CharField(max_length = 30 , label = 'First Name' )
last_name = forms.CharField(max_length = 30 , label = 'Last Name' )
def signup( self , request, user):
user.first_name = self .cleaned_data[ 'first_name' ]
user.last_name = self .cleaned_data[ 'last_name' ]
user.save()
return user
在上面的代码片段中, CustomSignupForm
进行了扩展,该类继承了SignupForm
类的所有功能并添加了必要的功能。 在这里,使用first_name
和last_name
名称的自定义字段是在同一类中使用signup
模块创建并保存的。
上面代码的settings.py
中的ACCOUNT_FORMS
是
ACCOUNT_FORMS = {
'signup' : 'YourProject.forms.CustomSignupForm' ,
}
可以在ACCOUNT_FORMS
扩展创建的任何其他自定义表单。 在文档中进行了说明 。
同样,可以扩展LoginForm
UserForm
AddEmailForm
和其他AddEmailForm
。 但是,请记住,在扩展这些表单并将其链接到settings.py
时,请记住。 不要忘记将原始表单(例如SignupForm
)作为参数传递给您的类,有时您可能必须处理自定义验证并返回用户或其他值。 请参考源代码以遵循正确的流程。
用户干预和自定义验证:
让我们讨论添加自定义验证并干预用户注册流程。 DefaultAccountAdapter
非常有用,确实可以用于解决用户使用django-allauth
可能遇到的大多数自定义问题。
范例1:电子邮件的受限清单
在找到一种存储和获取受限列表的方法后,当受限电子邮件尝试注册时,您可以使用适配器并在注册表单中引发验证错误。 扩展DefaultAccountAdapter
并重写clean_email
方法。 在项目目录中创建adapter.py
并扩展默认适配器类。
from allauth.account.adapter import DefaultAccountAdapter
from django.forms import ValidationError
RestrictEmailAdapter(DefaultAccountAdapter): class RestrictEmailAdapter(DefaultAccountAdapter):
def clean_email( self , email):
RestrictedList = [ 'Your restricted list goes here.' ]
if email in RestrictedList
raise ValidationError('You are restricted registering.\
Please contact admin.')
return email
最后,将settings.py
的帐户适配器指向您的扩展类。 ACCOUNT_ADAPTER = 'YourProject.adapter.RestrictEmailAdapter'
示例2:为用户名添加最大长度
由于allauth库中不存在ACCOUNT_USERNAME_MAX_LENGTH
,因此可以使用DefaultAccountAdapter
轻松实现此功能。 扩展DefaultAccountAdapter
类并重写clean_username
方法。 自定义验证后,您还需要再次引用clean_username
来完成其他内置验证。
上一段中的最后一句话是使用DefaultAccountAdapter.
的DefaultAccountAdapter.
您应该永远不要忘记为该模块引用原始模块名称,以完成其他验证。
from allauth.account.adapter import DefaultAccountAdapter
from django.forms import ValidationError
class UsernameMaxAdapter(DefaultAccountAdapter):
def clean_username( self , username):
if len (username) > 'Your Max Size' :
raise ValidationError('Please enter a username value\
less than the current one')
# 对于其他默认验证.
return DefaultAccountAdapter.clean_username( self , username)
最后,指向您的settings.py
的子类:
ACCOUNT_ADAPTER ='YourProject.adapter.UsernameMaxAdapter'
您可以在源代码中引用adapters.py
文件 ,并扩展其他模块并添加进程或更改其流程。 populate_username,
clean_password
等模块(可以定制以限制常用密码)可以具有自定义的过程和流程,而无需重写它们。
如果在适当的情况下使用DefaultAccountAdapter
来干预allauth的默认过程,它将是一个强大的工具。 allauth
带有各种各样的内置设置,它们在这里 。