 
- 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采用RESTful架构风格。因此它使用基于资源的路由。资源类负责处理响应者的 HTTP 方法,这些方法本质上是名称以 on_ 开头并以小写 HTTP 方法名称结尾的类方法(例如 on_get()、on_patch()、on_delete()等) .)。Falcon 应用程序对象的add_route ()方法将其路由器与资源类的实例关联起来。
在上面使用的 Hellofalcon.py 示例中,当客户端分别通过 GET 和 POST 方法请求/hello路由时,将调用on_get()和on_post()响应程序。
如果没有路由与请求匹配,则会引发HTTPRouteNotFound实例。另一方面,如果路由匹配但资源未实现所请求的 HTTP 方法的响应程序,则默认响应程序将引发HTTPMethodNotAllowed的实例。
现场转换器
Falcon 的路由机制允许 URL 将参数传递给响应者。URL 由三部分组成: 协议(例如http://或https://),后跟 IP 地址或主机名。URL 的第一个/主机名之后的剩余部分称为路径或端点。要传递的参数位于端点之后。
 
它充当资源标识符,例如唯一 ID 或主键。参数名称括在大括号中。除了请求和响应之外,路径参数的值还将转到响应者方法中定义的参数。
在以下示例中,路由器将资源类对象与由端点后面的参数组成的 URL 相关联。
from waitress import serve
import falcon
import json
class HelloResource:
   def on_get(self, req, resp, nm):
      """Handles GET requests"""
      resp.status = falcon.HTTP_200
      resp.content_type = falcon.MEDIA_TEXT
      resp.text = (
         'Hello '+nm
      )
app = falcon.App()
hello = HelloResource()
app.add_route('/hello/{nm}', hello)
if __name__ == '__main__':
   serve(app, host='0.0.0.0', port=8000)
我们可以看到on_get()响应者方法有一个额外的参数 nm 来接受从 URL 路由解析的数据。让我们使用HTTPie工具测试http://localhost:8000/hello/Priya。
>http GET localhost:8000/hello/Priya HTTP/1.1 200 OK Content-Length: 11 Content-Type: text/plain; charset=utf-8 Date: Mon, 18 Apr 2022 12:27:35 GMT Server: waitress Hello Priya
路径参数解析为的默认数据类型是str(即字符串)。然而,Falcon 的路由器引擎具有以下内置字段转换器,使用它们也可以将它们读入其他数据类型。
- IntConverter - 此类在falcon.routing模块中定义。构造函数使用以下参数 - 
IntConverter(num_digits=None, min=None, max=None)
- num_digits - 该值必须具有给定的位数。 
- min - 参数的最小要求值 
- max - 参数的最大允许值。 
在哪里,
例如,以下add_route()函数接受 1 到 100 之间的整数作为rollno。
app.add_route('/student/{rollno:int(1,1,100}', StudentResource())
- UUIDConverter - falcon.routing 模块中的此类将 32 个十六进制数字的字符串转换为 UUID(通用唯一标识符)。 
- DateTimeConverter - 将参数字符串转换为日期时间变量。参数必须是strptime()函数识别的任何格式的字符串,默认为'%Y-%m-%dT%H:%M:%SZ'。 
格式字符串使用以下格式代码 -
| %A | 工作日缩写名称 | 周日、周一 | 
| %A | 工作日的完整名称 | 星期天星期一 | 
| %d | 以零填充小数表示的月份中的某一天 | 01, 02 | 
| %-d | 十进制数形式的月份中的某一天 | 1, 2.. | 
| %b | 月份名称缩写 | 一月、二月 | 
| %m | 月份作为补零十进制数 | 01, 02 | 
| %B | 完整的月份名称 | 一月二月 | 
| %-y | 没有世纪的年份作为十进制数 | 0, 99 | 
| %Y | 年份,世纪为十进制数 | 2000年、1999年 | 
| %H | 小时(24 小时制)作为补零十进制数 | 01, 23 | 
| %p | 区域设置的 AM 或 PM | 上午下午 | 
| %-M | 以十进制表示的分钟 | 1, 59 | 
| %-S | 第二位十进制数 | 1, 59 | 
在以下示例中,add_route()函数将带有两个参数的 URL 与 Resource 对象相关联。第一个参数 nm 默认是一个字符串。第二个参数 Age 使用IntConverter。
from waitress import serve
import falcon
import json
class HelloResource:
   def on_get(self, req, resp, nm,age):
      """Handles GET requests"""
      retvalue={"name":nm, "age":age}
      resp.body=json.dumps(retvalue)
      resp.status = falcon.HTTP_200 
      resp.content_type = falcon.MEDIA_JSON
app = falcon.App()
hello = HelloResource()
app.add_route('/hello/{nm}/{age:int}', hello)
if __name__ == '__main__':
   serve(app, host='0.0.0.0', port=8000)
请注意,on_get()响应程序使用路径参数来形成一个dict对象 – retvalue。然后将其 JSON 表示形式指定为响应正文的值并返回给客户端。如前所述,JSON 是 Falcon 响应对象的默认内容类型。
启动 Waitress 服务器并在HTTPie的帮助下检查 URL http://localhost:8000/hello/Priya/21的响应。
http GET localhost:8000/hello/Priya/21
HTTP/1.1 200 OK
Content-Length: 28
Content-Type: application/json
Date: Fri, 22 Apr 2022 14:22:47 GMT
Server: waitress {
   "age": 21,
   "name": "Priya"
}
您还可以在浏览器中检查响应,如下所示 -
