Django:在视图或模板中检测管理员登录

Rus*_*sty 32 django django-admin

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

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

Django 1.4版

Joe*_*nin 83

在模板中:

{% if user.is_superuser %}
    <p>Hello, admin.</p>
{% else %}
    <p>Hello, ordinary visitor.</p>
{% endif %}
Run Code Online (Sandbox Code Playgroud)

在视图中:

if request.user.is_superuser:
    # Hello, admin.
else:
    # Hello, ordinary visitor.
Run Code Online (Sandbox Code Playgroud)

根据您的需要,is_staff可能比您更合适is_superuser.你可以在这里阅读有关的区别.


sup*_*cuo 16

对于你的简单案例,约瑟夫的答案很好,但实际上既不是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 %}
Run Code Online (Sandbox Code Playgroud)

或者在视图中使用has_perm:

if not request.user.has_perm('poll.change_poll'):
    return HttpResponseForbidden('Nope!')
Run Code Online (Sandbox Code Playgroud)

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

@permission_required('poll.change_poll')
def edit_poll(request, poll_id):
    # ....
Run Code Online (Sandbox Code Playgroud)

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