Tornado 有没有简单的办法一次性取到所有参数

2013-07-19 12:18:11 +08:00
 zeyexe
http://127.0.0.1/?a=1&b=2&c=3&d=4&e=5&f=6&g=7

像上面那样,我现在想把 a b c d e f g 这些参数一次性取到,但是通过 get_argument 方法每次只能取一个参数,大家有没有什么简单的办法把所有参数全部取到?
15393 次点击
所在节点    Tornado
10 条回复
talentsnail
2013-07-19 12:19:22 +08:00
get_arguments()
zeyexe
2013-07-19 12:31:35 +08:00
@talentsnail 这个方法实际上是获取某个参数的全部值。是用在 http://127.0.0.1/?a=1&a=2&a=3 这种情况下的。
jkeylu
2013-07-19 13:01:27 +08:00
self.request.arguments
kernel1983
2013-07-19 13:12:54 +08:00
http://www.tornadoweb.org/en/stable/httpserver.html

method
HTTP request method, e.g. “GET” or “POST”

uri
The requested uri.

path
The path portion of uri

query
The query portion of uri

version
HTTP version specified in request, e.g. “HTTP/1.1”


tornado的文档是比较吊, 基本上无视初学者的感受
zeyexe
2013-07-19 13:36:56 +08:00
@jkeylu
@kernel1983

倒是忘了最基本的东西。
hiwljun
2013-07-19 13:58:48 +08:00
web.py的web.input()非常好用,tornado里我的做法是这样的:
在BaseHandler加个input函数获取所有的值并转换成storage:
from Storage import storage

def input(elf):
i = storage()
args = self.request.arguments
for a in args:
i[a] = self.get_argument(a)
return i

i["files"], i["path"]这些再另作处理下。就可以用self.input()获取所有GET和POST的值了。
zeyexe
2013-07-19 14:28:06 +08:00
from Storage import storage

这是 web.py 的模块吗?
hiwljun
2013-07-19 15:14:35 +08:00
@zeyexe 是的。
__author__ = 'Aaron Swartz'
class Storage(dict):
"""
A Storage object is like a dictionary except `obj.foo` can be used
in addition to `obj['foo']`.

>>> o = storage(a=1)
>>> o.a
1
>>> o['a']
1
>>> o.a = 2
>>> o['a']
2
>>> del o.a
>>> o.a
Traceback (most recent call last):
...
AttributeError: 'a'

"""
def __getattr__(self, key):
try:
return self[key]
except KeyError, k:
raise AttributeError, k

def __setattr__(self, key, value):
self[key] = value

def __delattr__(self, key):
try:
del self[key]
except KeyError, k:
raise AttributeError, k

def __repr__(self):
return '<Storage ' + dict.__repr__(self) + '>'

storage = Storage
lq611
2013-08-20 10:39:42 +08:00
self.request.arguments
bwangel
2016-09-09 12:47:20 +08:00
刚刚看 tornado 源码,突然想起这个帖子来了。

我现在看的 tornado 版本是 4.4.1

在 HTTPServerRequest 对象(也就是 get 方法中的 self.request 对象)中,有三个属性

`arguments`: 所有的 post/get 参数字典
`query_arguments`: 所有的 get 参数字典
`body_arguments`: 所有的 post 参数字典

现在文档中也有写了:

http://www.tornadoweb.org/en/stable/httputil.html#tornado.httputil.HTTPServerRequest.query_arguments

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/76289

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX