python - 发送自定义密码重置表格

标签 python django

我想通过访问某个网址并通过 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/

相关文章:

javascript - 使用 jQuery 处理按钮/ajax 请求

python altair折线图按计数截断

python - np.array 的 np.array 的深拷贝

django - 如何再次将 templatetag 的返回值插入到 {% if - 中

Django管理员: Add TinyMCE to particular TextField only?

python - Django 中的静态根和静态 Url 混淆

django - 当用户在从 UserCreation 表单继承的 UserRegister 表单上注册时,如何自动将用户添加到组

Python 相当于 'grep -C N' ?

python - Pandas Dataframe : How to select a row by index, 然后获取接下来的几行

sum() 函数的 Python 代码错误——语法在一个平台上有效,在另一个平台上无效