【问题标题】:How do I customize the ResetPasswordForm in Django-AllAuth如何在 Django-AllAuth 中自定义 ResetPasswordForm
【发布时间】:2015-02-28 18:27:16
【问题描述】:

我遇到了几个问题。首先,来自configuration section of the docs...

ACCOUNT_FORMS (={})
Used to override forms, for example: {‘login’: ‘myapp.forms.LoginForm’}

我怎么知道该放什么?我知道它需要像'password_reset_form':'myapp.forms.MyPasswordResetForm' 这样的(键、值)对,但我怎么知道要使用的正确键?

其次,在我的 forms.py 中,我尝试扩展 ResetPasswordForm 之类的

from allauth.account.forms import ResetPasswordForm

class MyResetPasswordForm(ResetPasswordForm):

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        # Override the email widget
        self.fields['email'].widget = forms.TextInput(attrs={'class':'form-control', 'type':'email', 'required':'required', 'placeholder':'Email'})

但这一直给我错误Error importing form class accounts.forms: "cannot import name 'ResetPasswordForm'"

对此的任何建议或指导将不胜感激。

【问题讨论】:

    标签: python django django-allauth


    【解决方案1】:

    以下是您可以自定义的所有表单:

    ACCOUNT_FORMS = {
        'login': 'allauth.account.forms.LoginForm',
        'signup': 'allauth.account.forms.SignupForm',
        'add_email': 'allauth.account.forms.AddEmailForm',
        'change_password': 'allauth.account.forms.ChangePasswordForm',
        'set_password': 'allauth.account.forms.SetPasswordForm',
        'reset_password': 'allauth.account.forms.ResetPasswordForm',
        'reset_password_from_key': 
        'allauth.account.forms.ResetPasswordKeyForm',
        'disconnect': 'allauth.socialaccount.forms.DisconnectForm',
    }
    

    另外,您可以查看docs 亲自查看。

    【讨论】:

      【解决方案2】:

      我记得我也遇到了第一个问题,很惊讶我在文档中的任何地方都找不到它!我最终不得不检查source code,而您需要输入的关键值位于get_form_class 函数的views.py 文件中。

      对于您的第二个问题,乍一看,我不确定为什么导入失败 - 它对我有用。

      您使用的是什么版本的 all-auth?

      【讨论】:

      • 关注get_form_class 的建议。我使用的是 0.19.0 版。 (至少,当我运行 pip freeze 时,它是这么说的。我怀疑我的 forms.py 中发生了某种循环依赖
      • 更新:看起来它是一个循环依赖(不确定在哪里)。我将自定义 PasswordResetForm 的代码复制到了 forms2.py 模块中,现在一切正常。
      • @Ben 你是怎么做到的?我只将导入和自定义函数复制到了新的 forms2.py,但仍然出现错误。我有allauth的最新版本。
      • @Stratford 循环导入很可能是在设置和表单文件之间造成的。您的表单不需要扩展 allauth ResetPasswordForm,使用 forms.Form 就足够了(allauth 会处理其他所有事情)
      猜你喜欢
      • 2015-03-15
      • 1970-01-01
      • 2015-07-05
      • 2018-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-01
      • 1970-01-01
      相关资源
      最近更新 更多