【发布时间】:2014-04-30 18:10:33
【问题描述】:
我正在使用 tornado 创建 Web 服务。我学习了许多处理 URL 的方法,但我找不到处理这些 URL 的方法:
Main-Dns:xxxx(port)/{System}(这是静态的)/{word}?q={word}
我的代码:
import tornado.ioloop
import tornado.web
import psycopg2
import json
import collections
import datetime
import decimal
application = tornado.web.Application([
(r"/system/(\w+)[?][q]=[\w+]",MainHandler),
])
if __name__ == "__main__":
application.listen(8888)
tornado.ioloop.IOLoop.instance().start()
我仅在删除“?”时尝试了许多正则表达式它有效
例如,获取此 URL 的 uri:
uri:/system/4?q=
handler:r"/system/(\d)[?]q=",MainHandler
uri:/system/word_word?q=
handler:r"/system/(\w+)[?][q]=",MainHandler
该参数是可选的,我只把“()”用于测试发送参数。
我使用 Python regex tester web,发现我可以工作,但在 Tornado 中我认为这不是一回事。
提前致谢。
编辑:更多示例
Handle:/system/(\w+)[?]q=(\w+)
URL examples : /system/(any_word)?q=(any_word) like
/system/word_word?q=word
/system/wo5d_w5rd?q=w5ord
编辑:这是控制台输出:
WARNING:tornado.access:404 GET/system/test?q=test
我可以不用'?'但我需要用“?”来做。
编辑:使用 get_argument() 方法,可能是这样的:
Uri:/system/word?{last_name='Jackson_Smith'}
to get this parameters: "word" , "last_name" , "'Jackson_Smith'"
【问题讨论】:
-
您能否展示一些 URL 示例和预期输出?
-
>一些例子 >handle:/system/(\w+)[?]q=(\w+) >url:/system/word_word?q=word , /system/word_4d?q=44d