Python Django员工登录到所有URL
我想定义一些以/staff/*开头的特定URL,以便仅由staff访问。因此,只有员工才能访问以/staff开头的URL/*Python Django员工登录到所有URL,python,django,python-2.7,django-views,Python,Django,Python 2.7,Django Views,我想定义一些以/staff/*开头的特定URL,以便仅由staff访问。因此,只有员工才能访问以/staff开头的URL/* 如何在Django中定义它?使用自定义中间件。如果url以/staff/开头,并且request.user不是staff,则引发Http404或向客户端返回一些特殊消息 以下是一个例子: 对于django版本
如何在Django中定义它?使用自定义中间件。如果url以/staff/开头,并且request.user不是staff,则引发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
然后在
settings.py中添加StaffCheckMiddleware
您可以使用user\u passes\u test
或staff\u member\u required
装饰器来装饰与url关联的视图(以/staff/
开头),示例如下:
使用用户通过测试装饰师:
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
from django.contrib.admin.views.decorators import staff_member_required
@staff_member_required
def your_view(request, ...):
# Only for staff
需要员工\u成员
装饰师:
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
from django.contrib.admin.views.decorators import staff_member_required
@staff_member_required
def your_view(request, ...):
# Only for staff
如果我有20个员工视图,那么我需要将其添加到所有视图中。我认为第一个答案是最好的。我认为对于需要登录的视图,您也可以使用login\u required
decorator。当然,使用中间件的解决方案也不错。Django 1.10中的错误。在load_middleware mw_instance=中间件(处理程序)类型错误:object()不接受parameters@KareshADjango似乎在1.10中升级了它的中间件风格,我更新了Django 1.10的答案,请检查它是否适合您。注意,这并不像@staff\u member\u所要求的那样严格,这也确保了用户是活跃的