龙卷风网址不匹配? ("讯问")签名

时间:2014-04-30 18:10:33

标签: python regex 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正则表达式测试人员网站,发现我工作但是在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(),它就像这样:posible:

       Uri:/system/word?{last_name='Jackson_Smith'}  
       to get this parameters: "word" , "last_name" , "'Jackson_Smith'"

1 个答案:

答案 0 :(得分:3)

你不想尝试捕获"?q = .."在正则表达式中。您可以使用RequestHandler方法在get_argument内捕获该内容。

这是一个小例子,我认为可以捕捉到你想要做的事情:

#!/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