如何从视图或模板文件中检测我的管理员用户是否已登录?例如,我的网站的用例:
- 用户打开
/admin/
,输入正确的凭据 - 然后用户打开一些页面,例如
/page/
,有“添加”和“删除”按钮 - 用户打开
/admin/
并单击“注销” /page/
-> 没有“添加”和“删除”按钮
Django 1.4 版
如何从视图或模板文件中检测我的管理员用户是否已登录?例如,我的网站的用例:
/admin/
,输入正确的凭据/page/
,有“添加”和“删除”按钮/admin/
并单击“注销”/page/
-> 没有“添加”和“删除”按钮Django 1.4 版
在模板中:
{% 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
. 您可以在此处了解不同之处。
Joseph 的回答适合您的简单案例,但实际上既不合适is_staff
也不is_superuser
完美。假设您的页面是/polls/
(一个Poll
对象列表,在一个名为 的应用程序中poll
),您应该测试特定poll.change_poll
和poll.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
.
如果您不关心用户拥有的权限并且只想确保他们已登录,则可以使用user.is_anonymous
,如果用户已注销,则为 true,如果用户已登录,则为 false。
默认情况下,user.is_staff
用户需要访问 Django Admin。