如何使用Django在视图上设置站点范围的密码保护和特权要求?

时间:2019-04-24 20:43:30

标签: django security passwords

我的Django应用旨在供我工作的公司内部使用;但是,需要将其设置为只有具有登录凭据的某些员工才能访问任何网页。此外,我需要能够自定义视图,以便只有具有正确权限的帐户才能访问它们。我该怎么办?

我的直觉是使用与管理站点相同的密码保护和特权系统,因为我的项目基本上只是为了轻松查看和编辑数据库。但是,Google似乎没有提供有关如何执行此操作的任何信息,而且我与Django的合作仅一个半月,因此我自己还没有足够的知识来解决这一问题。有没有办法使用管理站点的密码保护和特权系统或无法访问?

1 个答案:

答案 0 :(得分:0)

如果员工特权足够,则可以使用staff_member_required视图装饰器轻松完成。您所需要做的就是将装饰器应用于您的视图

staff_member_required示例:

from django.contrib.admin.views.decorators import staff_member_required

@staff_member_required
def random_view(request):
    #If the user does not have staff privileges he will be redirected to a login page 

如果您要测试更具体的特权,则应使用user_passes_test装饰器。参见:Django User Passes Test Decorator

您将装饰器应用于视图,并传递一个函数作为参数,以验证用户是否应有权访问该页面,如果该函数返回了True的访问权限,则将正常访问该用户,否则该用户将被重定向。

user_passes_test示例:

from django.contrib.auth.decorators import user_passes_test

def user_is_author(user)
    #your test goes here, pseudo code example ignore syntax.
    return user.is_author

@user_passes_test(user_is_author)
def random_view(request):
    #if user passed the test the view will work normally