我正在尝试使用Django创建一个API,我正在验证请求头是否包含api密钥,并根据该密钥引发异常,如下所示:
def _check_driver_authorization(request):
if request.headers.get('authorization') is not None:
token = request.headers['authorization']
user = Driver.objects.filter(access_token=token)
if user.exists():
return
raise Http401
else:
raise Http403
我没有发现任何人试图这样做,我已经在这里搜索了许多线程,他们都试图返回响应(渲染),我的情况是我试图中断请求并引发异常。
**编辑/更新:**有关详细信息和解释,内置的Http 404异常会引发以下问题:Http404
但是我尝试创建的异常(与Http 404完全相同)引发了以下问题:Http403
3条答案
按热度按时间fnatzsnv1#
有处理程序和异常到响应的转换器,它允许你执行
raise Http404
。正如你所看到的,它们也将PermissionDenied
异常转换为带有403状态代码的响应。所以你可以引发 it 而不是Http403。但是对于401,你必须返回类似return HttpResponse('Unauthorized', status=401)
的东西。i2byvkas2#
下面是Django处理异常的代码:
正如你在这里看到的,Django会处理
Http404
和PermissionDenied
异常,而Http 401响应似乎没有异常。PermissionDenied
(Http 403)异常为以下异常(类似于Http404异常):所以它应该可以和
raise PermissionDenied
一起工作。**Django文档:**错误视图
kupeojn63#
您使用的是django rest framework吗?您可以像这样从APIException继承:
比如在你的视野里或者任何你想去的地方
打电话的人会得到401。