创建用户&在Django

时间:2016-07-05 21:58:19

标签: python django django-1.6

我很抱歉,如果已经有了实质性的答案,我已经搜索了很长时间,找不到任何有用的答案。

我有一个django项目,具有不同级别的帐户访问权限。我有一组“经理”,我想让他们管理用户帐户。

我希望Managers能够为用户创建用户帐户对象。但是,我不希望他们必须处理创建密码并将其发送给用户(出于显而易见的原因)。这样,管理员可以模仿用户代表他们完成工作,用户可以维护密码控制和数据所有权。

想法是经理创建帐户,并且在创建帐户时,将向用户发送密码重置表单(与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="support@dmarcian.com",
                    email_template_name='registration/password_reset_email.html')

帐户正确创建,一切都运行正常。问题是虽然表单有效(重置表单是有效的语句打印),但它实际上并不是发送重置表单。没有表格错误。

但是,在测试时,我使用系统中已存在的地址初始化表单,如下所示:

set_password_form = PasswordResetForm({'email':'existing_address@example.com'})

密码重置表单无错误地发送。因此它只适用于系统中现有的用户电子邮件地址,但是虽然已经创建了用户并且调用了.save()方法,但它仍然没有捕获它(用户在创建时被标记为“活动”,因此它们应该是能够找到)

我有点不知所措。我可以想到几个方法可以解决这个问题,但这似乎是最直接的方式,我真的不完全确定它为什么不起作用。

是的,我可以发送消息。我正在使用django的后端邮件进行测试:

EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'

1 个答案:

答案 0 :(得分:1)

看了source code,看起来Django忽略了请求,因为密码是空白的。

在保存用户之前,请尝试设置临时密码(例如,使用django.utils.crypto.get_random_string())。