如何在Django中返回401未授权?
与其每次都这样做:
res = HttpResponse("Unauthorized")
res.status_code = 401
return res
有没有什么方法可以不用每次都输入这些呢?
5 个回答
12
继承解决方案
from django.http import HttpResponse
class Http401(HttpResponse):
def __init__(self):
super().__init__('401 Unauthorized', status=401)
在一个 util.py
文件中,可以用来替代多次调用:
return HttpResponse('401 Unauthorized', status=401)
只需用:
return Http401()
有趣的是,在1.9.6版本中还有其他命名的响应,具体可以查看这个链接:https://github.com/django/django/blob/1.9.6/django/http/response.py#L443,但没有401这个。
12
class HttpResponseUnauthorized(HttpResponse):
status_code = 401
...
return HttpResponseUnauthorized()
通常情况下,你应该在 __init__
方法里设置实例,这样每个实例就有自己的变量,而不是让所有实例共享同一个变量。不过,Django 已经为你处理好了这个问题:
class HttpResponse(object):
"""A basic HTTP response, with content and dictionary-accessed headers."""
status_code = 200
def __init__(self, content='', mimetype=None, status=None,
content_type=None):
# snip...
if status:
self.status_code = status
170
我知道这个问题比较老,但它在谷歌上搜索“django 401”时排第一,所以我想提一下...
假设你已经导入了 django.http.HttpResponse
,你可以用一行代码来实现:
return HttpResponse('Unauthorized', status=401)
这里的 'Unauthorized'
字符串是可选的。很简单。