如果已经有实质性的答案,我已经搜索了很长时间,找不到任何有用的答案,我很抱歉。在Django中创建用户和发送密码重设
我有一个django项目,有不同级别的帐户访问权限。我有一组“经理”,我想让他们管理用户帐户。
我希望管理员能够为用户创建用户帐户对象。但是,我不希望他们必须处理创建密码并将其发送给用户(出于显而易见的原因)。通过这种方式,管理员可以冒充用户代表他们完成工作,用户可以维护密码控制和数据所有权。
这个想法是管理者创建账户,当账户被创建时,用户将被发送一个密码重置表单(与django的开箱验证相同),这将允许他们设置密码。
我的代码类似于以下(省略非必要东西)
from django.contrib.auth.models import User
from django.contrib.auth.forms import PasswordResetForm
@manager_required
def manager_add_users(request):
add_user_form = manager_add_user_form(request.POST)
new_user_name = add_user_form.cleaned_data['user_name']
new_user_email = add_user_form.cleaned_data['user_email']
new_user = User.objects.create_user(
username = new_user_name,
email = new_user_email,
)
new_user.save()
set_password_form = PasswordResetForm({'email': new_user.email })
if set_password_form.is_valid():
print 'Reset Form Is Valid'
set_password_form.save(
request= request,
use_https=True,
from_email="[email protected]",
email_template_name='registration/password_reset_email.html')
的帐户创建正确,一切都没有错误运行。问题是,尽管表单有效(重置表单是有效的语句打印),但实际上并没有发送重置表单。没有表单错误。
然而,在测试的时候我初始化的形式与已经存在于系统中像这样的地址:
set_password_form = PasswordResetForm({'email':'[email protected]'})
密码重置形式发送没有错误。因此,它只适用于系统中现有的用户电子邮件地址,但尽管用户已创建并调用了.save()方法,但它仍未捕获它(用户在创建时标记为“活动”,因此它们应该是能够找到)
我有点茫然。我可以想到几种解决这个问题的方法,但这似乎是最直接的方式,我真的不完全确定它为什么不起作用。
是的,我可以发送消息。我使用的Django的后端邮件来进行测试:
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
你还没有提到任何关于你的电子邮件后端。 Django本身不发送任何电子邮件,你必须配置一个电子邮件服务器。运行测试时,它会替换一个虚拟后端。您是否设置了电子邮件服务器并确认您可以实际发送电子邮件? –
对不起。我使用django的后端。我想明确的是,当我提到成功地在某些测试用例中发送了邮件时,我配置了邮件服务器。我已更新问题以包含我的设置。 – rob
谢谢澄清。我之所以提到它,是因为在没有设置邮件服务器的情况下,测试可以正常工作,因为Django的测试运行器替代了测试后端。 –