Tornado Documentation
› http://www.v2ex.com/tornado/
Tornado on GitHub
› https://github.com/facebook/tornado/
Tornado Gists
› http://tornadogists.org/
zeyexe
V2EX  ›  Tornado

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

  •  
  •   zeyexe · Jul 19, 2013 · 16696 views
    This topic created in 4862 days ago, the information mentioned may be changed or developed.
    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 方法每次只能取一个参数,大家有没有什么简单的办法把所有参数全部取到?
    10 replies  •  2016-09-09 12:47:20 +08:00
    talentsnail
    talentsnail
    Jul 19, 2013❤️1
    1
    get_arguments()
    zeyexe
    zeyexe
    OP
    Jul 19, 2013
    2
    @talentsnail 这个方法实际上是获取某个参数的全部值。是用在 http://127.0.0.1/?a=1&a=2&a=3 这种情况下的。
    jkeylu
    jkeylu
    Jul 19, 2013❤️2
    3
    self.request.arguments
    kernel1983
    kernel1983
    Jul 19, 2013❤️1
    4
    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
    zeyexe
    OP
    Jul 19, 2013
    5
    @jkeylu
    @kernel1983

    倒是忘了最基本的东西。
    hiwljun
    hiwljun
    Jul 19, 2013❤️1
    6
    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
    zeyexe
    OP
    Jul 19, 2013
    7
    from Storage import storage

    这是 web.py 的模块吗?
    hiwljun
    hiwljun
    Jul 19, 2013
    8
    @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
    lq611
    Aug 20, 2013
    9
    self.request.arguments
    bwangel
    bwangel
    Sep 9, 2016❤️1
    10
    刚刚看 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
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4393 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 06:51 · PVG 14:51 · LAX 22:51 · JFK 01:51
    ♥ Do have faith in what you're doing.