- Python Falcon教程
- Python Falcon - 主页
- Python Falcon - 简介
- Python Falcon - 环境设置
- Python Falcon - WSGI 与 ASGI
- Python Falcon - Hello World(WSGI)
- Python Falcon - 女服务员
- Python Falcon - ASGI
- 蟒蛇Falcon - Uvicorn
- Python Falcon - API 测试工具
- 请求与响应
- Python Falcon - 资源类
- Python Falcon - 应用程序类
- Python Falcon - 路由
- Falcon - 后缀响应者
- Python Falcon - 检查模块
- Python Falcon - Jinja2 模板
- Python Falcon - cookie
- Python Falcon - 状态代码
- Python Falcon - 错误处理
- Python Falcon - 钩子
- Python Falcon - 中间件
- Python Falcon - CORS
- Python Falcon - Websocket
- Python Falcon - Sqlalchemy 模型
- Python Falcon - 测试
- Python Falcon - 部署
- Python Falcon 有用资源
- Python Falcon - 快速指南
- Python Falcon - 有用的资源
- Python Falcon - 讨论
Python Falcon - 应用程序类
此类是基于 Falcon 的 WSGI 应用程序的主要入口点。此类的实例提供可调用的 WSGI 接口和路由引擎。
import falcon app = falcon.App()
此类的__init __()构造函数采用以下关键字参数 -
media_type - 初始化 RequestOptions 和 ResponseOptions 时使用的媒体类型。Falcon 允许轻松且可定制的互联网媒体类型处理。默认情况下,Falcon 仅启用 JSON 和 HTML(URL 编码和多部分)表单的处理程序。
falcon.MEDIA_JSON
falcon.MEDIA_MSGPACK
Falcon.MEDIA_MULTIPART
falcon.MEDIA_URLENCODED
falcon.MEDIA_YAML
falcon.MEDIA_XML
Falcon.MEDIA_HTML
Falcon.MEDIA_JS
Falcon.MEDIA_TEXT
Falcon.MEDIA_JPEG
Falcon.MEDIA_PNG
Falcon.MEDIA_GIF
request_type - 此参数的默认值是falcon.Request类。
response_type - 此参数的默认值为falcon.Response类。
Falcon 支持的其他媒体类型由以下常量表示 -
为了使App对象可调用,它的类有一个__call__()方法。
__call__(self, env, start_response)
这是一个 WSGI 应用程序方法。WSGI 开发服务器或其他生产服务器(Waitress/Uvicorn)使用此对象来启动服务器实例并侦听来自客户端的请求。
App 类还定义了 add_route() 方法。
add_route(self, uri_template, resource)
此方法有助于将 URI 路径与资源类的对象关联起来。传入请求将根据一组 URI 模板路由到资源。如果路径与给定路由的模板匹配,则请求将被传递到关联的资源进行处理。根据请求方法,调用相应的响应程序方法。
例子
让我们将on_post()响应程序方法添加到HelloResource类并测试 GET 和 POST 请求的端点。
from waitress import serve import falcon import json class HelloResource: def on_get(self, req, resp): resp.status = falcon.HTTP_200 resp.content_type = falcon.MEDIA_TEXT resp.text = ( 'Hello World' ) def on_post(self, req, resp): data=req.media nm=data['name'] resp.status = falcon.HTTP_200 resp.content_type = falcon.MEDIA_TEXT resp.text = ( 'Hello '+nm ) app = falcon.App() hello = HelloResource() app.add_route('/hello', hello) if __name__ == '__main__': serve(app, host='0.0.0.0', port=8000)
输出
使用 Waitress 服务器运行应用程序并使用 Curl 检查响应。要响应 GET 请求,请使用以下命令 -
C:\Users\User>curl localhost:8000/hello Hello World
我们通过 POST 方法将一些数据发送到 /hello URL,如下所示 -
C:\Users\User>curl -i -H "Content-Type:application/json" -X POST -d "{"""name""":"""John"""}" http://localhost:8000/hello HTTP/1.1 200 OK Content-Length: 10 Content-Type: text/plain; charset=utf-8 Date: Sun, 17 Apr 2022 07:06:20 GMT Server: waitress Hello John
要添加到静态文件目录的路由,Falcon 有add_static_route()方法。
add_static_route(self, prefix, directory, downloadable=False, fallback_filename=None)
prefix 参数是与该路由匹配的路径前缀。目录参数是提供文件的源目录。如果您想在响应中包含 ContentDisposition 标头,则可下载参数设置为 True。Fallback_filename默认为 None,但可以在找不到请求的文件时指定。
add_error_handler ()方法用于注册一种或多种异常类型的处理程序。
add_error_handler(self, exception, handler=None)
ASGI 可调用 App 类拥有相同的方法。它在 falcon.asgi 模块中定义。
import falcon.asgi app=falcon.asgi.App()
请注意,ASGI 应用程序中资源类的响应者必须是协程(使用async关键字定义)而不是普通方法。
class HelloResource: async def on_get(self, req, resp): """Handles GET requests""" resp.status = falcon.HTTP_200 resp.content_type = falcon.MEDIA_TEXT resp.text = ( 'Hello World' )