【问题标题】:django-password-reset - how to set attributesdjango-password-reset - 如何设置属性
【发布时间】:2014-02-15 18:53:11
【问题描述】:

我正在尝试使用 django-password-reset (https://pypi.python.org/pypi/django-password-reset/0.2) 来允许用户恢复他们的密码。

django-password-reset 提供了一个表单,用户可以在其中输入他们的用户名或电子邮件地址,并尝试在数据库中找到其中一个。 在我的项目中,用户没有用户名字段 - 只有电子邮件字段。 因此,我需要让它只通过“电子邮件”字段搜索用户,而不是通过“用户名”字段搜索用户,这在我的系统中不存在。

项目文档说有一些属性可以改变这种行为: http://django-password-reset.readthedocs.org/en/latest/views.html.

但是,我根本不知道如何设置这些属性。

有人可以帮忙吗?

【问题讨论】:

    标签: python django django-forms


    【解决方案1】:

    只需像这样覆盖Recover 视图:

    class MyRecover(Recover):
        search_fields = ['email']
    
    myrecover = MyRecover.as_view()
    

    因为有两个恢复 url,你需要先传递一个带有签名的,然后是覆盖的,然后是包含的,看起来不是很干,但这是使 url 正确分派的唯一方法:

    url(r'^recover/(?P<signature>.+)/$', 'password_reset_recover.views.recover_done',
        name='password_reset_sent'),
    # next we override our url, assuming your app name is called 'core'
    url(r'^recover/$', 'core.views.myrecover', name='password_reset_recover'),
    url(r'^/', include('password_reset.urls')),
    

    【讨论】:

    • 成功了!我错过了网址。但是,我对代码进行了较小的修复(请参阅编辑)。希望更改会得到应用。
    【解决方案2】:

    django-password-reset 的文档说它使用django.contrib.auth.models.User(django 内置在User 模型中)来搜索username 或email。所以这里会有一个用户名。

    如果您想更改django-password-reset 的功能,您可以进入forms.py 文件并更改表单的search_fields 变量(和其他逻辑),使其仅通过电子邮件进行搜索。

    这是 forms.py 的超链接:

    https://github.com/brutasse/django-password-reset/blob/master/password_reset/forms.py

    我会先更改PasswordRecoveryForm

    【讨论】:

    • 感谢您的回答。但是,我想避免直接更改 django-password-reset 代码,因为我想将系统部署到另一台机器上,而不必在那里再次进行相同的更改。
    猜你喜欢
    • 2014-11-20
    • 2018-07-18
    • 1970-01-01
    • 2019-05-28
    • 1970-01-01
    • 2019-06-26
    • 1970-01-01
    • 2019-08-26
    • 1970-01-01
    相关资源
    最近更新 更多