在Python中解析Django的HttpResponse

1 投票
3 回答
1093 浏览
提问于 2025-04-18 09:44

我有一个叫做 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 的数据结构里。

希望这样能让你明白。

撰写回答