Я преподаю себе Tornado, поэтому я купил копию Introduction to Tornado и начал работать с примерами. Я нахожусь на третьем, и это работает, но я не понимаю, как/почему.Понимание информационного потока в приложении 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
.
Когда я заполняю форму и нажимаю submit, я попадаю в http://localhost:8000/poem
, у которого есть мое стихотворение. Поэтому приложение работает.
То, что я не понимаю, является шагом в середине. Что происходит, когда я попал в submit? Как приложение знает, что отправьте мне форму до http://localhost:8000/poem
?
О, проблема в том, что я идиот! Да, 'action ="/poem "' была той частью, которую я отсутствовал. – Batman