我想定义一些特定的网址,以/ staff / *开头,仅供员工访问。因此,只有员工可以使用/ staff / *
访问网址如何在Django中定义它?
答案 0 :(得分:4)
您可以将user_passes_test
或staff_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
。