在Python中解析Django的HttpResponse
我有一个叫做 getCode
的函数,它是通过 ajax 调用的,并返回 HttpResponse(json.dumps({'code': 2}))
。在一个情况下,这个函数是从另一个 Python 函数内部调用的,目的是为了遵循 DRY(不要重复自己)的原则。我想在这个其他函数的 if
语句中访问 HttpResponse,像这样:
x = getCode(request)
if x['code'] == 2:
# do stuff
我该如何解析这个 HttpResponse 对象,以便能够把里面的数据当作字典来访问呢?
3 个回答
0
首先,发送一个获取请求。
x = getCode(request)
把收到的响应转换成字符串。
string_data = r.getresponse().read().decode("utf-8")
再把这个字符串转换成字典。
dict_data = json.loads(string_data)
0
这是一个字典,你可以这样访问它:
if x['code'] == 2:
1
这样做听起来不太好,也不太正确,因为你需要先创建一个 HttpResponse
对象,然后再从其他 Python 函数中调用视图。这其实是代码设计和结构上的问题。
你可以把视图中生成数据的逻辑提取到一个单独的函数里:
def my_view(request):
data = get_data()
return HttpResponse(json.dumps(data), mimetype='application/json')
然后,直接调用这个函数,而不是调用视图:
x = get_data()
if x['code'] == 2:
...
这样一来,你就不需要先把数据转换成 JSON
格式,再创建一个 HttpResponse
,然后再把响应内容加载回 Python 的数据结构里。
希望这样能让你明白。