DRF报错视图firstapp.views.perticular_customers返回None而非HttpResponse如何解决?
问题原因
- 核心错误是请求方法的判断逻辑写错:代码中直接将
request请求对象本身和'GET'/'PUT'/'DELETE'字符串做相等判断,该条件永远不可能成立。所有分支都没有命中的情况下,函数执行完成后没有返回任何HttpResponse对象,默认返回None,触发了对应报错。 - 补充:Django的视图要求必须返回HttpResponse对象(或其子类,比如JsonResponse、HttpResponseNotFound等),否则就会抛出该错误。
解决方法
将视图中所有请求方法判断的request替换为request.method即可,修改后的完整代码如下:
@csrf_exempt def perticular_customers(request, var): try: customer = Customers.objects.get(id=var) except Customers.DoesNotExist: return HttpResponse(status=404) if request.method == 'GET': serialize = CustomersSerializer(customer) return JsonResponse(serialize.data) elif request.method == 'PUT': data = JSONParser().parse(request) serialized = CustomersSerializer(customer, data=data) if serialized.is_valid(): serialized.save() return JsonResponse(serialized.data) return JsonResponse(serialized.errors, status=400) elif request.method == 'DELETE': customer.delete() return HttpResponse(status=204)
内容的提问来源于stack exchange,提问作者deep
相关产品推荐
相关产品推荐

