蚊章汇 - Tornado
type: channel
link: https://linuxcn.bwsl.wang/tag/Tornado/
items: Python Web 应用程序 Tornado 框架简介

Python Web 应用程序 Tornado 框架简介
type: item
date: 2019-02-10T02:03:06+08:00
description: 在比较 Python 框架的系列文章的第三部分中，我们来了解 Tornado，它是为处理异步进程而构建的。在这个由四部分组成的系列文章的前两篇中，我们介绍了 Pyramid 和 Flask Web 框架。我们已经构建了两次相同的应用程序，看到了一个完整的 DIY 框架和包含了更多功能的框架之间的异同。现在让我们来看看另一个稍微不同的选择：Tornado 框架。Tornado 在很大程度上与 Flask 一样简单，但有一个主要区别：Tornado 是专门为处理异步进程而构建的。在我们本系列所构建的应用程序中，这种特殊的酱料（LCTT 译注：这里意思是 Tornado 的异步功能）在我们构建的 app 中并不是非常有用，但我们将看到在哪里可以使用它，以及它在更一般的情况下是如何工作的。让我们继续前两篇文章中模式，首先从处理设置和配置开始。Tornado 启动和配置如果你一直关注这个系列，那么第一步应该对你来说习以为常。$ mkdir tornado_todo $ cd tornado_todo $ pipenv install --python 3.6 $ pipenv shell (tornado-someHash) $ pipenv install tornado创建一个 setup.py 文件来安装我们的应用程序相关的东西：(tornado-someHash) $ touch setup.py # setup.py from setuptools import setup, find_packages requires = [ 'tornado', 'tornado-sqlalchemy', 'psycopg2', ] setup( name='tornado_todo', version='0.0', description='A To-Do List built with Tornado', author='<Your name>', author_email='<Your email>', keywords='web tornado', packages=find_packages(), install_requires=requires, entry_points={ 'console_scripts': [ 'serve_app = todo:main', ], }, )因为 Tornado 不需要任何外部配置，所以我们可以直接编写 Python 代码来让程序运行。让我们创建 todo 目录，并用需要的前几个文件填充它。todo/ __init__.py models.py views.py就像 Flask 和 Pyramid 一样，Tornado 也有一些基本配置，放在 __init__.py 中。从 tornado.web 中，我们将导入 Application 对象，它将处理路由和视图的连接，包括数据库（当我们谈到那里时再说）以及运行 Tornado 应用程序所需的其它额外设置。# __init__.py from tornado.web import Application def main(): """Construct and serve the tornado application.""" app = Application()像 Flask 一样，Tornado 主要是一个 DIY 框架。当构建我们的 app 时，我们必须设置该应用实例。因为 Tornado 用它自己的 HTTP 服务器来提供该应用，我们必须设置如何提供该应用。首先，在 tornado.options.define 中定义要监听的端口。然后我们实例化 Tornado 的 HTTPServer，将该 Application 对象的实例作为参数传递给它。# __init__.py from tornado.httpserver import HTTPServer from tornado.options import define, options from tornado.web import Application define('port', default=8888, help='port to listen on') def main(): """Construct and serve the tornado application.""" app = Application() http_server = HTTPServer(app) http_server.listen(options.port)当我们使用 define 函数时，我们最终会在 options 对象上创建属性。第一个参数位置的任何内容都将是属性的名称，分…