开发者学堂课程【Python Web 框架 Flask 快速入门:路由参数处理】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/603/detail/8785
路由参数处理
目录:
一、路由参数传递和解析
二、参数格式限定
一、路由参数传递和解析
1、路由参数传递和解析释义
有时我们需要将同一类 URL 映射到同一个视图函数处理,比如:
使用同一个视图函数来显示不同用户的订单信息。
路由传递的参数默认当做 string 处理。
@app.route('/orders/<order_id>')
defhello_itheima(order_id);
#此处的逻辑:去查询数据库改用户的订单信息,并返回
printtype(order_id)# 类型为 unicode
return'helloitcast%d'%order_id
2、路由传参示例
假设:
访问一个订单编号为666的网址(127.0.0.1:5000/orders/666),回
车结果希望得到订单编号为666的订单详情。
或,访问一个订单编号为123的网址
(127.0.0.1:5000/orders/123),回车结果希望得到订单编号为123
的订单详情。
这种情况,因为订单有成千上万个,我们不太可能定义多个路由
分别解析。那么,可以将(127.0.0.1:5000/orders/)这一段定义成
一个最基础路由地址,根路由。orders/ 的后边就当做一个参数,传
什么参数都能用同一个路由来解析处理。这就是我们需要设定的路由
参数动态值。
如:使用同一个视图函数来显示不同用户的订单信息。
需要用“<>”来定义路由的参数,在“<>”内需要起名:
@app.route('/orders/<order_id>')
#这个“<>”里边的 order_id 就是 ID 名。
defget_order_id(order_id);
#需要在视图函数的()内填入参数名,后面的代码才能使用。
printtype(order_id)
return'order_id%s'%order_id
运行:
/Users/Andy/.virtualenvs/flask_py/bin/python2/Users/And
y/Desktop/Flask_test_demo/Flask_test_demo.py
*Runningonhttp://127.0.0.1:5000/(PressCTRL+Ctoquit)
127.0.0.1--[24/Jan/201818:21:30]"GET/orders/666
HTTP/1.1"404-
127.0.0.1--[24/Jan/201818:21:37]"GET/orders/123
HTTP/1.1"404-
看结果。
回应用界面,先输入根路由:127.0.0.1:5000/orders/ 后,再加
入123或666或 aaa 等,可得到想要的订单详情。
这就是用一个路由来实现不同动态参数的解析处理。
二、参数格式限定
1、参数格式限定释义
有的时候,需要对路由做访问优化,就是对参数做格式限定。
假如单编号是123456这些数字,若换成 abc 这些字符也能读出
来,123和 aaa 不是同一类别,这时候的参数就没有做任何的限定。
<order_id> 就没有做任何的限定,它默认就是一个字串,没有什么
格式类别区分。
2、常用作路由访问优化有函数类型有: int、float
比如:订单 ID 为 int 类型
@app.route('/orders/<int:order_id>')
#路由做访问优化为订单ID是int类型
defget_order_id(order_id);
#查询数据库改用户的订单信息,并返回
printtype(order_id)
return'order_id%s'%order_id
这里指定int,会调用系统的路由转换器进行匹配和转换。
大致原理是将参数强转为 int ,如果成功。则可以进行路由匹配
如果参数无法转换成功,就无法匹配该路由。