2017-02-11 59 views
0

我自学龙卷风,所以我买的Introduction to Tornado副本,并开始通过实例工作。我进入第三个,它的工作原理,但我不明白如何/为什么。了解信息流龙卷风应用

以下是本书中代码的修改版本,但功能上相同。我有一个名为poemaker.py

import os.path 
import tornado.web 
from tornado.options import define, options 


define("port", default=8000, help="run on the given port", type=int) 


class IndexHandler(tornado.web.RequestHandler): 
    def get(self): 
     self.render('index.html') 


class PoemPageHandler(tornado.web.RequestHandler): 
    def post(self): 
     name = self.get_argument('name') 
     noun1 = self.get_argument('noun1') 
     noun2 = self.get_argument('noun2') 
     verb = self.get_argument('verb') 
     self.render('poem.html', mary=name, lamb=noun1, snow=noun2, 
        go=verb) 


if __name__ == '__main__': 
    import tornado.httpserver 
    import tornado.ioloop 
    import tornado.options 

    tornado.options.parse_command_line() 
    app = tornado.web.Application(
    handlers=[(r'/', IndexHandler), (r'/poem', PoemPageHandler)], 
    template_path=os.path.join(os.path.dirname(__file__), "templates") 
    ) 

    http_server = tornado.httpserver.HTTPServer(app) 
    http_server.listen(options.port) 
    tornado.ioloop.IOLoop.instance().start() 

文件然后在同一目录下我有另一个目录中称为templates其中有两个HTML文件:index.html,然后poem.hmtl。

的index.html:

<!DOCTYPE html> 
    <html> 
    <head><title>Poem Maker Pro</title></head> 
    <body> 
     <h1>Enter terms below.</h1> 
     <form method="post" action="/poem"> 
      <p>Name<br><input type="text" name="name"></p> 
      <p>Singular noun<br><input type="text" name="noun1"></p> 
      <p>Singualr noun<br><input type="text" name="noun2"></p> 
      <p>Verb w/o object<br><input type="text" name="verb"></p> 
      <input type="submit"> 
    </form> 
    </body> 
</html> 

当我启动服务器,并转到http://localhost:8000/,我看到的index.html呈现的内容。这正是我所期望的,因为这就是IndexHandler应该做的。

当我填写表格,并点击提交,我得到采取http://localhost:8000/poem其中有我的诗。所以应用程序的作品。

我不明白的是中间的一步。当我点击提交时会发生什么?该应用程序如何知道提交表单应该我http://localhost:8000/poem

回答

1

基本上,在您的示例中,您已经使用龙卷风设置了一个RESTful服务。

在HTML表单上,您有specifymethod="post",那么在提交表单时,您会将字段中的数据作为HTTP发送请求发送。同样,通过使用action="/poem",您可以指定提交表单时何处发送表单数据。

当你点击提交,你发送一个HTTP POST请求你的龙卷风Web服务器。当您的龙卷风服务器接收该请求,在handlers列表龙卷风迭代并创建tornado.web.RequestHandler子类,PoemPageHandler,其与正则表达式"/poem"这在形式作为动作定义相关联的一个实例,然后调用post()方法。

的post()方法的最后一个命令是renderself.render('poem.html', mary=name, lamb=noun1, snow=noun2, go=verb)这使得与传递的参数模板poem.html和重定向你http://localhost:8000/poem

+0

哦,所以问题是我是个白痴!是的,“action =”/诗“是我失踪的部分。 – Batman