我想通过访问某个网址并通过 POST 方法传递电子邮件来重置 django 应用程序中的密码。那是因为我想在 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
列表。我在这里缺少什么?或者也许有更好的方法来做到这一点?
正确代码:
自定义类是不必要的,应该删除。密码重置方法应该如下所示:
def mobile_password_reset(request):
"""Sends mail with password reset link."""
my_form = PasswordResetForm(request.POST)
if my_form.is_valid():
my_form.save()
return JsonResponse({'success': True})
else:
return JsonResponse({'success': False})
需要注意的是,如果没有将 django.contrib.sites
应用添加到设置中,my_form.save()
将无法工作。也可以通过添加以下参数来修复:my_form.save(request=request)
。
最佳答案
表格needs to be bound to data to be valid 。您正在传递电子邮件参数,但没有传递数据
,因此表单将始终处于未绑定(bind)状态。对于未绑定(bind)的表单,is_valid()
返回 False
,但没有错误。
我不明白您的自定义表单有何用途。如果 email
位于 request.POST
中,为什么不直接将 request.POST
传递给常规 PasswordRestForm
?
my_form = PasswordResetForm(request.POST)
关于python - 发送自定义密码重置表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33803235/