Python ValueError:视图未返回HttpResponse对象
我正在写一个Django服务器。我必须为我的API类使用通用视图。现在,每当我使用postman测试代码时,一切都正常。但如果我使用其他客户端(如Talend API tester或我的Chrome浏览器)测试它,它会返回500个错误,表示API未返回任何HttpResponse对象。这是我的基本代码库 如果禁用csrf_豁免,则会出现csrf_豁免错误。如果我启用了它,则类将返回None。Python ValueError:视图未返回HttpResponse对象,python,python-3.x,django,httpresponse,Python,Python 3.x,Django,Httpresponse,我正在写一个Django服务器。我必须为我的API类使用通用视图。现在,每当我使用postman测试代码时,一切都正常。但如果我使用其他客户端(如Talend API tester或我的Chrome浏览器)测试它,它会返回500个错误,表示API未返回任何HttpResponse对象。这是我的基本代码库 如果禁用csrf_豁免,则会出现csrf_豁免错误。如果我启用了它,则类将返回None。 @method_decorator(csrf_exempt, name='dispatch') clas
@method_decorator(csrf_exempt, name='dispatch')
class ClassName(View):
@throttle
def post(self, request) -> JsonResponse:
try:
data = (json.loads(request.body))
except JSONDecodeError:
# decoding error of Json File.
msg = "An error occurred while decoding the input"
return message_handler(msg, 500)
number = data.get("number", None)
if number is None:
msg = "number key is missing from the payload"
return message_handler(msg, 400)
if len(number) == 0:
msg = "number number cannot be an empty string"
return message_handler(msg, 400)
if len(number) > 30:
msg = "Maximum 30 characters are supported for car number key"
return message_handler(msg, 400)
......
some other application logic
......
return JsonResponse({
"status": True,
"message": "",
}, status=200)
def message_handler(message: str, status_code: int, status: bool = False) -> JsonResponse:
return JsonResponse({
"status": status,
"message": message,
}, status=status_code)
我所有的API都使用相同的格式,它们返回一个JsonResponse,那么我做错了什么
更新#1:
消息处理程序是一个通用函数。还有五个其他的回复,所有回复都使用通用函数。代码已更新
更新#2
错误似乎与装饰器(油门)有关。下面是油门代码:
def throttle(function):
@functools.wraps(function)
def wrapper(self, request, *args, **kwargs):
try:
last_request_at = request.session[LAST_REQUEST_KEY]
except KeyError:
last_request_at = None
reequest.session[LAST_REQUEST_KEY] = last_request_at
return function(self, request, *args, **kwargs)
return wrapper
如果在类上放置@method\u decorator(throttle,name='post')
,我会得到以下错误
TypeError: wrapper() missing 1 required positional argument: 'request'
什么是
message\u handler
,还有其他回报吗?@klauds。我用更多的代码更新了这个问题message\u handler
是一个返回JsonResponse
对象的通用函数。如果您使用Chrome访问它,您只是在执行GET请求吗?您没有实现def get()或@require_http_方法,因此这将返回一个错误。@TimNyborg我正在Chrome上使用一个发送Post请求的应用程序。我还有其他课程也有同样的问题。csrf\u excempt
会有问题吗?@O\u O打印(类型(编号))会给你什么输出?在number=data.get(“number”,None)
之后写入它。