我正在使用此代码制作一个可以返回发布请求的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。
答案 0 :(得分:2)
request
是HttpRequest
对象,而不是原始请求正文。您需要使用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: {}>
。