4

我正在使用 django 1.1。 它说的 is_active 标志上的文档
http://docs.djangoproject.com/en/1.1/topics/auth/#topics-auth

这不控制用户是否可以登录。身份验证路径中的任何内容都不会检查 is_active 标志,因此如果您想基于 is_active 为 False 拒绝登录,则由您自己检查登录看法。但是,使用 has_perm() 之类的方法进行权限检查确实会检查此标志,并且对于非活动用户将始终返回 False。

我正在使用 django-registration(最新的 0.8 alpha)并使用所有默认后端。django-registration 的整个前提是基于 is_active 标志。即它只有在用户激活后才被设置。但是,我可以看到,当用户登录时,它正在使用 django.contrib.auth.views.login。我可以从 auth_urls.py 中的代码中看到这一点。

当用户注册但尚未激活时,我希望显示一条消息,内容类似于“您尚未激活您的帐户”

目前默认行为是表单的错误消息,“用户名和密码不匹配”

我也在视图中使用登录装饰器

@login_required

我的问题是:

编辑:谢谢詹姆斯和亨利。我不认为我很擅长描述我的问题。我已经重做了这个。

  1. django 文档说 is_active 在登录用户时不用作决定因素。这显然不是这种情况。自己试试。我无法弄清楚这在代码中发生的位置。有人知道吗?据我所知,它不会发生在 django-registration 和 django.contrib.auth 中。
  2. 为了显示我上面描述的错误消息,对我来说最好的方法是什么?请记住我正在使用 django-registration,所以很多管道已经完成。我宁愿不修改这个或重写一切。如果可能的话,我正在寻找一个....“优雅”的解决方案。

提前致谢

关于 Q1,

4

2 回答 2

5

感谢所有思考这个问题的人。最后,我注意到默认模板中有一些我以前没有注意到的 html 代码。

{% if form.errors %}
<div class="error">
<p>Your username and password didn't match. Please try again.</p>
</div>
{% endif %}

看了之后觉得有点傻。我从另一个项目复制了代码,只是假设错误是动态生成的,而不是硬编码的。

所以我开始调查

forms.errors 

并发现

forms.non_field_errors

并试图弄清楚如何设置输出的样式(因为默认情况下,愚蠢的东西在 html ul 标签中输出它)发现了这个:

Django 将表单错误输出为 {{ form.as_table }} 中的表行

谢谢钱斯(因为他的问题的答案很明显)

一条评论。这方面的文档(至少对于 1.1)很糟糕。为什么这在官方 django 文档中没有更明确,这超出了我的理解。似乎是一件非常基本的事情。

于 2011-05-10T05:58:35.130 回答
0

我认为问题出在 django-registration 中。

请参阅https://bitbucket.org/ubernostrum/django-registration/src/tip/docs/quickstart.rst第 132 行的信息

它说它不会允许非活动用户登录。

更新

您可以编写自己的后端或使用简单的后端并在您的配置文件模型上添加一个名为activated. 这将是相当多的工作。

至于它在哪里,我认为它在django.contrib.auth.views.login. 没有花太多时间浏览它,我认为你可以很容易地复制它并制作你自己的。(如果确实是问题)

然后,您需要在登录 url 的 auth_urls.py 文件中替换它。

编辑

我刚刚去了 docs 1.2 检查差异

http://docs.djangoproject.com/en/1.2/topics/auth/#django.contrib.auth.models.User.is_active 你会看到它说表单确实测试了它。所以要么它总是这样做,但它没有正确描述,要么你已经更新到 1.2 并且忘记/不知道。

于 2011-05-09T02:27:22.667 回答