我使用Django login_required装饰器,但我希望login_required
引发HTTP401未经授权的异常,而不是重定向到登录URL。
答案 0 :(得分:0)
如果您希望专门login_required
执行此操作,则可能必须覆盖它。否则,你可以做到这一点:
def view_func(request):
if request.user.is_anonymous:
return HttpResponse('Unauthorized', status=401)
# write all the code for your view that was there before
答案 1 :(得分:0)
我创建了一个自定义装饰器,以在用户未通过身份验证时返回401响应。
from functools import wraps
from django.http import HttpResponse
def user_passes_test(test_func):
def decorator(view_func):
@wraps(view_func)
def _wrapped_view(request, *args, **kwargs):
if test_func(request.user):
return view_func(request, *args, **kwargs)
return HttpResponse('Unauthorized', status=401)
return _wrapped_view
return decorator
def login_required_401(function=None):
actual_decorator = user_passes_test(
lambda u: u.is_authenticated,
)
if function:
return actual_decorator(function)
return actual_decorator
示例
@login_required_401
def example_view(request):
# write your code here