48

如何从视图或模板文件中检测我的管理员用户是否已登录?例如,我的网站的用例:

  1. 用户打开/admin/,输入正确的凭据
  2. 然后用户打开一些页面,例如/page/,有“添加”和“删除”按钮
  3. 用户打开/admin/并单击“注销”
  4. /page/-> 没有“添加”和“删除”按钮

Django 1.4 版

4

3 回答 3

123

在模板中:

{% if user.is_superuser %}
    <p>Hello, admin.</p>
{% else %}
    <p>Hello, ordinary visitor.</p>
{% endif %}

在视图中:

if request.user.is_superuser:
    # Hello, admin.
else:
    # Hello, ordinary visitor.

根据您的需要,is_staff可能比is_superuser. 您可以在此处了解不同之处。

于 2012-08-11T18:06:54.660 回答
28

Joseph 的回答适合您的简单案例,但实际上既不合适is_staff也不is_superuser完美。假设您的页面是/polls/(一个Poll对象列表,在一个名为 的应用程序中poll),您应该测试特定poll.change_pollpoll.delete_poll 权限

在模板中:

{% for poll in polls %}
    {% if perms.poll.change_poll %}<a href='/polls/edit/{{ poll.id }}'>Edit</a>{% endif %}
    {% if perms.poll.delete_poll %}<a href='/polls/delete/{{ poll.id }}'>Delete</a>{% endif %}
{% endfor %}

或在视图中使用has_perm

if not request.user.has_perm('poll.change_poll'):
    return HttpResponseForbidden('Nope!')

或者在使用装饰器的视图中:

@permission_required('poll.change_poll')
def edit_poll(request, poll_id):
    # ....

您可以将这些权限直接分配给用户、组(然后将用户放入该组)或通过设置is_superuser.

于 2012-08-11T18:43:23.993 回答
3

如果您不关心用户拥有的权限并且只想确保他们已登录,则可以使用user.is_anonymous,如果用户已注销,则为 true,如果用户已登录,则为 false。

默认情况下,user.is_staff用户需要访问 Django Admin。

于 2019-10-31T18:58:11.743 回答