Django管理员。在浏览器中创建用户

4 人关注

我设置了我的Django(1.8)管理系统,允许超级用户交互式地创建新用户。我的用户模型是用 AbstractUser 定制的,这意味着我的管理文件看起来像这样。

admin.py

from django.contrib import admin
from app.models import CPRUser
class UserAdmin(admin.ModelAdmin):
    model = CPRUser
    extra = 1
admin.site.register(CPRUser, UserAdmin)

而这里是模型。

class CPRUser(AbstractUser):
    student = models.PositiveIntegerField(verbose_name=_("student"),
                                            default=0,
                                            blank=True)
    saved = models.IntegerField(default=0)

这似乎是可行的,我可以通过管理员设置密码、用户名和一个新用户的所有其他自定义字段。然而,当我试图用新创建的用户登录时,认证过程的某些部分失败了。我从一个使用auth_views.login视图和模板式django登录模板的页面登录。

另一方面,如果我在django shell中使用manage.py createsuperusercreateuser()创建一个新用户,这些用户可以正常登录。这让我怀疑这与密码存储或散列有关--目前在管理员中我可以直接输入新用户的密码。问题是,这正是我希望能够做到的。我怎样才能得到这个理想的结果--我希望非IT专业的经理(我不会知道他们的详细资料)能够在管理中轻松创建新用户。我知道这样一个系统的风险。

在以下方面,文件似乎是相互矛盾的设置这个交互式用户创建 in one section:

"添加用户 "管理页面与标准的管理页面不同,它要求你在允许你编辑用户的其他字段之前选择一个用户名和密码"。

然后再过几段。

"用户密码不在管理中显示(也不存储在数据库中)"

这是我的管理员的屏幕截图。

如何让Django接受通过管理员互动创建的用户的登录尝试?

5 个评论
你能提供更多关于认证失败的细节吗?也就是说,确切的异常情况和信息是什么?
@BasicWolf 这就是问题的一部分--有什么最简单的方法可以挖掘出认证失败的原因?我的代码中没有一个是做认证的--都是django auth的黑盒子。
--然而,当我试图用新创建的用户登录时,认证过程的某些部分失败了。-- 那么,你究竟是如何尝试登录新创建的用户的呢?
对不起,已经更新了问题,使之更加清晰。我正在使用 auth_views.login 视图和模板式的django登录模板。
首先要确保用户和密码确实存储在数据库中。验证一下,存储的密码是哈希值,而不是原始密码。接下来,在django shell中进行测试。 from django.contrib.auth.forms import AuthenticationForm ; AuthenticationForm(data={'username': 'USER_NAME_HERE', 'password': 'RAW_PASSWORD_HERE'}).is_valid() 。- 这应该评估为 True 。作为最后的手段--简单地通过IDE或pudb对 login() 的代码进行调试。
python
django
django-admin
cs_stackX
cs_stackX
发布于 2016-08-05
1 个回答
Zaur Nasibov
Zaur Nasibov
发布于 2016-08-05
已采纳
0 人赞同