【发布时间】:2014-09-10 16:46:17
【问题描述】:
我必须将某些 Python Flask 代码转换为 Webapp2 代码(在 GAE 中使用)。
烧瓶代码sn-p
if request.method == 'POST':
post_body = urlencode(request.data)
尝试 1
if self.request.method == 'POST':
post_body = urllib.urlencode (self.request.data)
错误
::
File "/base/data/home/apps/s~myapp/1.378592258368936474/main_v3.py", line 1397, in post
post_body = urllib.urlencode (self.request.data)
File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webob-1.1.1/webob/request.py", line 1238, in __getattr__
raise AttributeError(attr)
AttributeError: data
尝试 2
if self.request.method == 'POST':
post_body = urllib.urlencode (self.request.body_file)
错误
::
File "/base/data/home/apps/s~myapp/1.378591983192817348/main_v3.py", line 1397, in post
post_body = urllib.urlencode (self.request.body_file)
File "/base/data/home/runtimes/python27/python27_dist/lib/python2.7/urllib.py", line 1292, in urlencode
if len(query) and not isinstance(query[0], tuple):
TypeError: not a valid non-string sequence or mapping object
尝试 3
if self.request.method == 'POST':
post_body = urllib.urlencode (self.request.body)
错误
::
File "/base/data/home/apps/s~myapp/1.378592109110666000/main_v3.py", line 1397, in post
post_body = urllib.urlencode (self.request.body)
File "/base/data/home/runtimes/python27/python27_dist/lib/python2.7/urllib.py", line 1293, in urlencode
raise TypeError
TypeError: not a valid non-string sequence or mapping object
Flask request.data 的正确 Webapp2 等价物是什么?
更新
我不知道 Python Flask。我使用 GAE Python。我正在尝试转换 Google Identity Toolkit (Gitkit) 中提供的示例代码。
来自Flask docs,
request.data
包含传入的请求数据作为字符串,以防它带有 mimetype Flask 无法处理。
根据Python docs,
urllib.urlencode()
将映射对象或二元元组序列转换为 “百分比编码”字符串,适合传递给上面的 urlopen() 作为 可选数据参数。这对于传递表单字典很有用 POST 请求的字段。结果字符串是一系列 由 '&' 字符分隔的 key=value 对,其中 key 和 value 使用上面的 quote_plus() 引用。当一个二元序列 tuples 用作查询参数,每个元组的第一个元素 是一个键,第二个是一个值。 value 元素本身可以是 一个序列,在这种情况下,如果可选参数 doseq 是 计算结果为 True,由 '&' 分隔的单个键 = 值对是 为键的值序列的每个元素生成。这 编码字符串中的参数顺序将与 序列中的参数元组。 urlparse 模块提供 用于解析查询的函数 parse_qs() 和 parse_qsl() 字符串转换成 Python 数据结构。
我尝试了urllib2.quote (self.request.body),但没有出现 Python 错误。但是,Gitkit 拒绝了回复,说它是无效的。这意味着 urllib2.quote (self.request.body) 不是 Python Flask urlencode(request.data) 的正确 Python Webapp2 等价物。
【问题讨论】:
-
我对烧瓶了解不多,但我在应用引擎上玩的足够多,可能能够提供帮助……你能解释一下“urlencode(request.data)”在烧瓶中的作用吗?
-
@Julldar 感谢您的回复。我已经用更多数据更新了这个问题,包括你问的那个。请看一下(更新部分在最后)。
标签: python google-app-engine python-2.7 webapp2