在Django中,只允许管理员用户访问视图

时间:2017-03-07 21:16:16

标签: django

我在Django 1.10中有一个仪表板应用程序。我想限制只有管理员用户访问此应用的视图,如果用户未登录,则将其重定向到管理员的登录页面。

这是我想应用某种逻辑的地方,这样只有管理员用户才能看到以/ dashboard /

开头的链接
  

url(r' ^ dashboard /',include(' demo.dashboard.urls',namespace =' dashboard'))

3 个答案:

答案 0 :(得分:5)

您必须使用@login_required装饰器或@staff_member_required装饰器来装饰各个视图。可能是后者,正如文档所述:

  

如果您正在为Django的管理员编写自定义视图(或者需要内置视图使用的相同授权检查),您可能会发现django.contrib.admin.views.decorators.staff_member_required()装饰器是{的有用替代品{1}}。

答案 1 :(得分:3)

你应该使用user_passes_test装饰者:

D:/Program Files/Ruby23-x64/lib/ruby/gems/2.3.0/gems/ruby-mp3info-0.8.10/lib/mp3
info.rb:244:in `initialize': No such file or directory @ rb_sysopen - C:/Users/MyUser/Desktop/MusicFolder/test.mp3 (Errno::ENOENT)
        from D:/Program Files/Ruby23-x64/lib/ruby/gems/2.3.0/gems/ruby-mp3info-0
.8.10/lib/mp3info.rb:244:in `new'
        from D:/Program Files/Ruby23-x64/lib/ruby/gems/2.3.0/gems/ruby-mp3info-0
.8.10/lib/mp3info.rb:244:in `reload'
        from D:/Program Files/Ruby23-x64/lib/ruby/gems/2.3.0/gems/ruby-mp3info-0
.8.10/lib/mp3info.rb:230:in `initialize'
        from D:/Program Files/Ruby23-x64/lib/ruby/gems/2.3.0/gems/ruby-mp3info-0
.8.10/lib/mp3info.rb:300:in `new'
        from D:/Program Files/Ruby23-x64/lib/ruby/gems/2.3.0/gems/ruby-mp3info-0
.8.10/lib/mp3info.rb:300:in `open'
        from ./main.rb:59:in `block in moveFilesIntoFolders'
        from ./main.rb:58:in `each'
        from ./main.rb:58:in `moveFilesIntoFolders'
        from ./main.rb:124:in `<main>'

答案 2 :(得分:0)

我不确定Django 1.10,但是在Django 3.0中,您可以使用请求检查用户是否是超级用户aka admin。只是做:

def yourviewname(request):
    if request.user.is_superuser:
        #whatever_you_want_the_admin_to_see
    else:
        #forbidden

您还可以使用Django随附的装饰器,例如@staff_member_required@login_required