Django自定义重置密码表单

5

我是一个django初学者(django 1.7 python 2.7)。

我正在尝试在我的django重置密码表单中添加无验证码recaptcha

我正在尝试使用这个recaptcha django插件

我已经按照说明添加了必要的设置:

将django-recaptcha安装到Python路径中。

将captcha添加到INSTALLED_APPS设置中。

将以下内容添加到我的settings.py文件中:

RECAPTCHA_PUBLIC_KEY = '76wtgdfsjhsydt7r5FFGFhgsdfytd656sad75fgh' # fake - for the purpose of this post.
RECAPTCHA_PRIVATE_KEY = '98dfg6df7g56df6gdfgdfg65JHJH656565GFGFGs' # fake - for the purpose of this post.
NOCAPTCHA = True

接下来的说明建议将验证码添加到表单中,如下所示:

from django import forms
from captcha.fields import ReCaptchaField

class FormWithCaptcha(forms.Form):
    captcha = ReCaptchaField()

如何访问内置的重置密码表单?作为初学者,我猜想我必须自定义内置的重置密码表单,但我该怎么做呢?我甚至不确定内置的重置密码表单在哪里。提供一个自定义内置重置密码表单的示例或推荐一个教程将会很有帮助。

我已经在Stack Overflow和Google上搜索了,但没有找到合适的内容。

1个回答

9
你想自定义PasswordReset视图。默认情况下,它使用PasswordResetForm,你可以进行自定义。
# in e.g. myapp/forms.py
from django.contrib.auth.forms import PasswordResetForm

class CaptchaPasswordResetForm(PasswordResetForm):
    captcha = ReCaptchaField()
    ...

然后在您的 urls.py 文件中导入您的表单,并使用 form_class 指定该表单。
from django.contrib.auth import views as auth_views
from django.urls import path
from web.forms import CaptchaPasswordResetForm

urlpatterns = [
    path("accounts/password_reset/", auth_views.PasswordResetView.as_view(form_class=CaptchaPasswordResetForm)),
]

对于 Django < 1.11 版本,您需要自定义 password_reset 视图的 URL 模式,并将 password_reset_form 设置为。
from django.contrib.auth import views as auth_views
from myapp.forms import CaptchaPasswordResetForm

urlpatterns = [
    ...
    url(
        r'^password_reset/',
        auth_views.password_reset,
        {'password_reset_form': CaptchaPasswordResetForm},
    )
]

如需有关在您的 URL 中包含密码重置视图的更多信息,请参阅文档


Alasdair,谢谢你提供的代码。我修改了一些代码,但是你绝对帮助我成功完成了这个项目。 - user3354539
很高兴你已经让它工作了!如果代码中有任何错误,你可以建议编辑以帮助未来的访问者。 - Alasdair
Alasdir,代码没有错误,只是根据我的表单/网址等环境进行了更改。再次感谢。 - user3354539

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接