企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
### 请求处理程序和请求参数 Tornado 的 Web 程序会将 URL 或者 URL 范式映射到 `tornado.web.RequestHandler` 的子类上去。在其子类中定义了 `get()` 或 `post()` 方法,用以处理不同的 HTTP 请求。 下面的代码将 URL 根目录 `/` 映射到 `MainHandler`,还将一个 URL 范式 `/story/([0-9]+)` 映射到 `StoryHandler`。正则表达式匹配的分组会作为参数引入 的相应方法中: ``` class MainHandler(tornado.web.RequestHandler): def get(self): self.write("You requested the main page") class StoryHandler(tornado.web.RequestHandler): def get(self, story_id): self.write("You requested the story " + story_id) application = tornado.web.Application([ (r"/", MainHandler), (r"/story/([0-9]+)", StoryHandler), ]) ``` 你可以使用 `get_argument()` 方法来获取查询字符串参数,以及解析 `POST` 的内容: ``` class MainHandler(tornado.web.RequestHandler): def get(self): self.write('<html><body><form action="/" method="post">' '<input type="text" name="message">' '<input type="submit" value="Submit">' '</form></body></html>') def post(self): self.set_header("Content-Type", "text/plain") self.write("You wrote " + self.get_argument("message")) ``` 上传的文件可以通过 `self.request.files` 访问到,该对象将名称(HTML元素 `&lt;input type="file"&gt;`的 name 属性)对应到一个文件列表。每一个文件都以字典的形式 存在,其格式为 `{"filename":..., "content_type":..., "body":...}`。 如果你想要返回一个错误信息给客户端,例如“403 unauthorized”,只需要抛出一个 `tornado.web.HTTPError` 异常: ``` if not self.user_is_logged_in(): raise tornado.web.HTTPError(403) ``` 请求处理程序可以通过 `self.request` 访问到代表当前请求的对象。该 `HTTPRequest` 对象包含了一些有用的属性,包括: * `arguments` - 所有的 `GET` 或 `POST` 的参数 * `files` - 所有通过 `multipart/form-data` POST 请求上传的文件 * `path` - 请求的路径( `?` 之前的所有内容) * `headers` - 请求的开头信息 你可以通过查看源代码 `httpserver` 模组中 `HTTPRequest` 的定义,从而了解到它的 所有属性。