📜  Python | 扩展和自定义django-allauth

📅  最后修改于: 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_namelast_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带有各种各样的内置设置,它们在这里