python - Tornado 网址不匹配? ("Interrogation") 标志

标签 python regex tornado

我正在使用 Tornado 创建网络服务。我学习了很多处理 URL 的方法,但我找不到处理此 URL 的方法:

Main-Dns:xxxx(port)/{System}(this is static)/{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正则表达式测试器网络,发现我可以工作,但在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'"

最佳答案

您不想 try catch 正则表达式中的“?q=..”。您可以使用 get_argument 方法在 RequestHandler 本身中捕获该信息。

这是一个小例子,我认为它反射(reflect)了您想要做的事情:

#!/usr/bin/python

import tornado.ioloop
import tornado.web

class MainHandler(tornado.web.RequestHandler):
    def get(self, word=None):
        self.write("word is %s\n" % word)
        self.write("uri is %s\n" % self.request.uri)
        self.write("q is %s\n" % self.get_argument("q"))


application = tornado.web.Application([

(r"/system/(.+)",MainHandler),

])

if __name__ == "__main__":
    application.listen(8888)
    tornado.ioloop.IOLoop.instance().start()

这是示例输出:

dan@dan:~$ curl localhost:8888/system/4?q=44d
word is 4
uri is /system/4?q=44d
q is 44d
dan@dan:~$ curl localhost:8888/system/word_word?q=word
word is word_word
uri is /system/word_word?q=word
q is word
dan@dan:~$ curl localhost:8888/system/wo5d_w5rd?q=w5ord
word is wo5d_w5rd
uri is /system/wo5d_w5rd?q=w5ord
q is w5ord

关于python - Tornado 网址不匹配? ("Interrogation") 标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23395170/

相关文章:

python - 将PeriodicCallback添加到已经运行的IOLoop实例

python - 错误: Series is ambiguous | Function with multiple arguments | DataFrame

python - 如何编写一个接受正整数 N 并返回前 N 个自然数的列表的函数

python - 从 pandas groupby 返回聚合数据框

regex - 使用 scan 方法 + regexp 将字符串分解为单词,如果单词有 `' ` 字符,则删除该字符及其后的所有内容

python - Tornado ioloop + 线程

python - 将配置文件中的所有 ip 重定向到静态地址

python - 在 pandas 中使用 blosc 压缩会导致堆损坏

regex - 泛数字正则表达式?

javascript - Javascript 字母数字的 RegEx 未按预期工作