源内容(英文)
Tornado 是一个强大的、开源的 Web 框架,旨在用于构建可扩展且非阻塞的 Python Web 应用程序。它由 FriendFeed(后来被 Facebook 收购)开发,用于高效处理长连接网络。Tornado 以其高性能、简单性和异步能力而闻名,是构建实时 Web 应用程序的绝佳选择。
在本文中,我们将通过三个代码示例来探索 Tornado,范围从一个简单的 "Hello World" 应用程序到更高级的功能,如表单提交和文件上传。
Tornado – Web 框架
下面是 Python 中 Tornado -Web 框架的示例。
示例 1:Tornado 中的 Hello World
在这个例子中,下面的 Python 脚本使用 Tornado web 框架创建了一个基本的 web 应用程序。它定义了一个处理程序,用于响应根 URL ("/") 上的 GET request,返回 "Hello, Tornado!"。应用程序在端口 8888 上监听,并在执行时启动 Tornado I/O 循环。
import tornado.ioloop
import tornado.web
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("Hello, Tornado!")
def make_app():
return tornado.web.Application([(r"/", MainHandler)])
if __name__ == "__main__":
app = make_app()
app.listen(8888)
tornado.ioloop.IOLoop.current().start()
#### 运行服务器
使用以下命令运行 tornado 服务器
python script_name.py
输出 :
示例 2:Tornado 中的表单提交
app.py : 现在,让我们看一个涉及处理表单提交的更高级示例。在这个例子中,我们创建了一个带有用户名输入字段的表单。Tornado 处理程序使用 self.get_argument 检索提交的数据,并返回个性化的问候。
import tornado.ioloop
import tornado.web
class FormHandler(tornado.web.RequestHandler):
def get(self):
self.render("form.html")
def post(self):
name = self.get_argument("name")
self.write(f"Hello, {name}!")
def make_app():
return tornado.web.Application([(r"/form", FormHandler)])
if __name__ == "__main__":
app = make_app()
app.listen(8888)
tornado.ioloop.IOLoop.current().start()
index.html : 这个 HTML 文档定义了一个简单的表单,其中包含一个 "Name" 输入字段和一个提交按钮。它链接到外部样式表 ("style.css") 进行样式设置,设置表单的宽度以及标签和输入的样式。表单被设置为使用 POST method 将数据提交到 "/form"。
Simple Form
/* style.css */
body {
font-family: Arial, sans-serif;
margin: 20px;
}
form {
width: 300px;
}
label {
display: block;
margin-bottom: 5px;
}
input {
width: 100%;
margin-bottom: 10px;
}
Simple Form
#### 运行服务器
使用以下命令运行 tornado 服务器
python script_name.py
输出:
!ezgifcom-video-to-gif-converter-(1).gif)
示例 3:Tornado 中的文件上传
app.py : 这个 Tornado 脚本设置了一个文件上传服务器,只有一个 "/upload" 路由。UploadHandler 类 通过渲染 HTML 上传表单来处理 GET 请求,并通过将上传的文件保存到 ‘uploads‘ 目录来处理 POST 请求。服务器运行在端口 8888 上。
import tornado.ioloop
import tornado.web
class UploadHandler(tornado.web.RequestHandler):
def get(self):
self.render("upload.html")
def post(self):
file = self.request.files[‘file‘][0]
filename = file[‘filename‘]
with open(f"uploads/{filename}", ‘wb‘) as f:
f.write(file[‘body‘])
self.write(f"File ‘{filename}‘ uploaded successfully!")
def make_app():
return tornado.web.Application([(r"/upload", UploadHandler)])
if __name__ == "__main__":
app = make_app()
app.listen(8888)
tornado.ioloop.IOLoop.current().start()
upload.html : 这个 HTML 文档创建了一个简单的表单