gpt4 book ai didi

python - 为什么创建 Flask.Response 对象似乎会丢失我的数据?

转载 作者:行者123 更新时间:2023-11-30 22:55:09 24 4
gpt4 key购买 nike

我有一个使用 flask.jsonify() 的 Python/Flask 应用程序

这是我的应用程序中的代码:我正在创建一个 flask.Response使用 jsonify() 对象我正在打印它的值。请注意我发送到 jsonify() 的 3 个参数。我稍后想让它们回来:

x = jsonify(message="Hello World!", status_code=90210, status=404)
print "x = %s\n" % str(x))
print "x.status_code = %s\n" % str(x.status_code))
print "x.status = %s\n" % str(x.status))
print "dir(x) = %s\n" % str(dir(x))

上面的输出是什么?如下所示。这个不成立。

x = <Response 82 bytes [200 OK]>
x.status_code = 200
x.status = 200 OK
dir(x) = ['__call__', '__class__', '__delattr__', '__dict__', '__doc__', '__enter__', '__exit__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_ensure_sequence', '_get_mimetype_params', '_on_close', '_status', '_status_code', 'accept_ranges', 'add_etag', 'age', 'allow', 'autocorrect_location_header', 'automatically_set_content_length', 'cache_control', 'calculate_content_length', 'call_on_close', 'charset', 'close', 'content_encoding', 'content_language', 'content_length', 'content_location', 'content_md5', 'content_range', 'content_type', 'data', 'date', 'default_mimetype', 'default_status', 'delete_cookie', 'direct_passthrough', 'expires', 'force_type', 'freeze', 'from_app', 'get_app_iter', 'get_data', 'get_etag', 'get_wsgi_headers', 'get_wsgi_response', 'headers', 'implicit_sequence_conversion', 'is_sequence', 'is_streamed', 'iter_encoded', 'last_modified', 'location', 'make_conditional', 'make_sequence', 'mimetype', 'mimetype_params', 'response', 'retry_after', 'set_cookie', 'set_data', 'set_etag', 'status', 'status_code', 'stream', 'vary', 'www_authenticate']

它显示statusstatus_code尽管我发送了不同的值,但两者都是 200。为什么我丢失了这些数据?在哪里可以找到"Hello World"我之前放入的字符串?没有.message() .

最佳答案

jsonify() 的关键字参数是 JSON 负载的一部分,而不是响应元数据的一部分。您使用 message 创建了一个 JSON 对象, status_codestatus键,这些与 Response 完全分开对象属性:

>>> x.get_data()
'{\n "message": "Hello World!", \n "status": 404, \n "status_code": 90210\n}'
>>> x.headers
Headers([('Content-Type', u'application/json'), ('Content-Length', u'74')])

Response.get_data()方法显示响应的实际负载。

请参阅 jsonify() documentation :

Creates a Response with the JSON representation of the given arguments with an application/json mimetype. The arguments to this function are the same as to the dict constructor.

(粗体强调我的)

之后设置状态,或将结果包装在新的 Response 中目的。作品如下:

x = jsonify(message="Hello World!", status_code=90210, status=404)
x.status_code = 404

请参阅Werkzeug Response documentation支持哪些属性和方法。

关于python - 为什么创建 Flask.Response 对象似乎会丢失我的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37493645/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com