我想在django应用程序中通过访问某个url并通过POST方法传递电子邮件来重置密码。这是因为我想在android应用程序中使用它,它将有自己的形式。所以,我想我可以创建一个自定义密码重置表单,然后保存它,但它不起作用。在
from django.contrib.auth.forms import PasswordResetForm
class Custom_password_reset_form(PasswordResetForm):
def __init__(self, email, **kwargs):
super(Custom_password_reset_form, self).__init__(**kwargs)
self.email = forms.EmailField(initial=email, max_length=254)
def mobile_password_reset(request):
"""Sends mail with password reset link."""
email = request.POST.get('email')
my_form = Custom_password_reset_form(email)
if my_form.is_valid():
print 'valid'
my_form.save()
else:
print 'not valid'
print my_form._errors
return render(...)
验证总是失败,给出空的my_form._errors
列表。我错过了什么?或者也许有更好的方法?在
正确代码:
自定义类是不必要的,应该删除。密码重置方法应如下所示:
^{pr2}$需要注意的是,如果没有将django.contrib.sites
应用程序添加到设置中,my_form.save()
将无法工作。也可以通过添加以下参数来修复:my_form.save(request=request)
。在
您可以通过重写django的auth模块来实现这一点。 在您的网址.py在
在此之后,添加以下视图
^{pr2}$在窗体中,添加窗体并在其中添加以下保存方法。在
当您提交该表单时,用户将收到包含令牌的链接的电子邮件。该链接只能使用一次。在
一种形式needs to be bound to data to be valid。您传递的是email参数,但没有
data
,因此表单将始终是未绑定的。对于未绑定的表单,is_valid()
返回False
,但没有错误。在我不明白你的定制表格需要什么。如果}?在
email
在request.POST
中,为什么不直接将request.POST
传递给正则的{相关问题 更多 >
编程相关推荐