在我的项目中,我有一个开放的注册表单,您可以在其中创建您的公司及其下面的所有信息。
之后您可以邀请其他人帮助您管理公司信息。为此,我的想法是,当登录用户添加另一个管理员时,我将使用虚假密码手动创建用户,并向创建的电子邮件发送重置密码请求,以便他可以创建自己的密码。重要代码如下:
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'
注意:
- 我已经有了一个完全可用的重置密码功能,使用了 django 和自定义模板中的所有内容。这就是为什么我试图以这种方式进行这项工作
- 我想自定义 email_template_name 和 subject_template_name,就像在我的代码中一样
提前致谢
最佳答案
在评论中进行一些对话后,我将留下回复。两个问题是创建密码的方式和未验证表单。此代码应该有效:
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')
(请注意,在此代码中我使用了表单而不是 View ,因为我不确定您用它做了什么。如果此代码不起作用,请更正它。)
关于python - 强制重置手动创建的用户密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44577349/