在手动创建的用户上强制重置密码

时间:2017-06-15 21:30:57

标签: python django

在我的项目中,我有一个开放式注册表单,您可以在其中创建公司以及所有相关信息。

之后,您可以邀请其他人来帮助您管理公司的信息。为此,我的想法是,当记录的用户添加另一个管理员时,我将使用假密码手动创建用户并向创建的电子邮件发送重置密码请求,以便他可以创建自己的密码。重要的代码如下:

from django.contrib.auth.forms import PasswordResetForm
...
def create_admin(request):
    if request.method == 'POST':
        form = AdminForm(request.POST)
        if form.is_valid():
            email = form.cleaned_data.get("email")
            random_pass = User.objects.make_random_password()
            user = User(username=email, email=email, password=random_pass)
            user.save()
            company.add_admin(user)
            reset_form = PasswordResetForm({'email': email})
            reset_form.save(
                email_template_name="rh/password_reset_email.html",
                subject_template_name="rh/password_reset_subject.txt")
            return redirect('dashboard')
    else:
        form = AdminForm()
    return render(request, 'rh/create_admin.html', {'form': form})

不幸的是,上面的代码返回Exception Type: AttributeError 'PasswordResetForm' object has no attribute 'cleaned_data'

注意:

  1. 我已经拥有一个完全正常工作的重置密码功能,使用django和自定义模板中的所有功能。这就是我试图以这种方式工作的原因
  2. 我想自定义email_template_name和subject_template_name,就像在我的代码中一样
  3. 提前致谢

1 个答案:

答案 0 :(得分:3)

在评论中进行一些对话后,我会留下回复。这两个问题是密码的创建方式和未验证的表单。这段代码应该有效:

email = form.cleaned_data.get("email")
random_pass = User.objects.make_random_password()
user = User(username=email, email=email)
user.set_password(random_pass)
user.save()
company.add_admin(user)
reset_form = PasswordResetForm({'email': email})
reset_form.is_valid()
reset_form.save(
    email_template_name="rh/password_reset_email.html",
    subject_template_name="rh/password_reset_subject.txt")
return redirect('dashboard')

(请注意,在此代码中我使用的是表单而不是视图,因为我不确定您使用的是什么。如果此代码无效,请更正。)