django没有返回请求响应

时间:2018-10-12 12:46:36

标签: python django django-rest-framework

我正在使用此代码制作一个可以返回发布请求的api,因此我可以根据自己的需求进行测试和修改。

我通过搜索SO尝试了两个代码。

from django.http import HttpResponse, JsonResponse
from django.views.decorators.csrf import csrf_exempt
import json


@csrf_exempt
def some_view(request, username):
    json_data = json.dumps(request)
    return JsonResponse(json_data, safe=False)

这段代码给了我is not JSON serializable的错误。

如果我对其应用了列表属性。喜欢

from django.http import HttpResponse, JsonResponse
from django.views.decorators.csrf import csrf_exempt
import json


@csrf_exempt
def some_view(request, username):
    json_data = json.dumps(list(request))
    return HttpResponse(json_data)

它没有给我一个错误,但是返回了空的输出​​。[]

编辑:如果我试图返回request.POST。我有一个空数组。

我正在通过POSTMAN测试此api。

3 个答案:

答案 0 :(得分:2)

requestHttpRequest对象,而不是原始请求正文。您需要使用request.body进行访问。如果您想通过Python对象返回JSON,则可能还想使用JsonResponse而不是HttpResponse

request_data = json.loads(request.body.decode('utf-8'))   # This assumes your request body is JSON
json_data = json.dumps(request_data)
return JsonResponse(json_data)

(我假设您会做的工作比稍后返回原始请求还要多。)

答案 1 :(得分:0)

我认为您应该尝试替换

type_code

通过

json_data = json.dumps(request)

在这里,您尝试序列化整个HTTP请求对象,我想这不是您想要执行的操作。

答案 2 :(得分:0)

如果要读取Request对象属性,可以使用request.__dict__
这将为您返回可序列化的对象,例如

{
    'FILES': < MultiValueDict: {} > ,
    'COOKIES': {},
    '_post_parse_error': False,
    'resolver_match': None,
    'GET': < QueryDict: {} > ,
    'META': {},
    'path_info': u '',
    'path': u '',
    'POST': < QueryDict: {} > ,
    'method': None
}

您可能还需要遍历并读取嵌套对象的__dict__属性,例如'GET': <QueryDict: {}>'POST': <QueryDict: {}>