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 - 根据其他列的值创建新列

python - 在 Pandas 中合并具有相同列名但列数不同的两个数据框

java - 如何将邮政地址与 iso 字母代码和邮政编码相匹配?

c# - 如何找到由下划线限定的 5 个数字组成的变量集?

python - 当数据可用时如何完成 Tornado 长轮询请求

django - 在Tornado Web服务器上运行Django以获得异步+ Django管理+ Django Orm可能性的最佳方法是什么?

python - 使用 scrapy 进行网页抓取论坛不会产​​生下一页

python - 了解 __get__ 和 __set__ 以及 Python 描述符

python - Django URL正则表达式不捕获Int

python - 如何在本地运行 Tornado Web 服务器?