Django员工登录所有网址

时间:2016-10-25 09:34:03

标签: python django python-2.7 django-views

我想定义一些特定的网址,以/ staff / *开头,仅供员工访问。因此,只有员工可以使用/ staff / *

访问网址

如何在Django中定义它?

2 个答案:

答案 0 :(得分:4)

您可以将user_passes_teststaff_member_required装饰器用于与您的网址关联的视图(以/staff/开头),示例可能如下所示:

使用user_passes_test装饰器:

from django.contrib.auth.decorators import user_passes_test

@user_passes_test(lambda u: u.is_staff, login_url='/some_url/')
def your_view(request, ...):
    # Only for staff

使用staff_member_required装饰器:

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

@staff_member_required
def your_view(request, ...):
    # Only for staff

答案 1 :(得分:3)

使用自定义中间件。如果url以/ staff /开头,而request.user不是工作人员,请提升Http404或向客户返回一些特殊消息。

以下是一个例子:

对于django版本< 1.10:

class StaffCheckMiddleware(object):
    def process_request(self, request):
        full_path = request.get_full_path()
        if full_path.startswith('/staff/') and not request.user.is_staff:
            raise Http404      

对于django 1.10或更高版本:

class StaffCheckMiddleware(object):
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        full_path = request.get_full_path()
        if full_path.startswith('/staff/') and not request.user.is_staff:
            raise Http404

        response = self.get_response(request)
        return response

然后在StaffCheckMiddleware中添加settings.py