测试管理班是专门面向测试与质量管理人员的一门课程,通过提升从业人员的团队管理、项目管理、绩效管理、沟通管理等方面的能力,使测试管理人员可以更好的带领团队、项目以及公司获得更快的成长。提供 1v1 私教指导,BAT 级别的测试管理大咖量身打造职业规划。
什么是路由
路由是将 URL 地址与应用程序中的函数相映射的过程。当用户在浏览器中输入特定的 URL 地址时,Flask 会调用与该地址相匹配的函数并返回相应的结果。
路由的应用场景
在 Web 应用程序都通过路由技术使用 URL 链接来控制网页显示的内容,只要知道 URL 链接,即使没有主页导航也可以直接访问所需网页。
通过 Flask 实现路由
路由类型 | 实现方式 |
---|---|
基本路由 | @app.route('/') |
动态路由 | @app.route('/user/<username>') |
限定类型 | @app.route('/post/<int:post_id>') |
在 Flask 中,可以使用 @app.route() 装饰器来定义路由。路由决定了用户请求的 URL 路径与对应的视图函数之间的关系。
基本路由
基本路由定义方式为:
from flask import Flask
# 创建 Flask 应用程序实例
app = Flask(__name__)
# 定义基本路由
@app.route("/")
def index():
return "Home Page"
@app.route("/about")
def about():
return "About Page"
# 运行应用程序
if __name__ == '__main__':
app.run()
````
在上述示例中,`@app.route('/')` 和 `@app.route('/about')` 分别定义了根路径` '/' `和 `/about` 的路由。当用户访问这些路径时,Flask 会调用对应的视图函数并返回相应的内容。
`@app.route('/') `访问地址为 `http://127.0.0.1:5000/`,`@app.route('/about')`访问地址为 `http://127.0.0.1:5000/about`。
### 动态路由
URL 中某些地方存在可变部分,为动态的 URL,Flask 支持这种动态 URL。
动态路由是通过尖括号 `<>` 实现的,放在尖括号里面的部分为动态部分,即在装饰器 `route` 传入 `<>` 部分,定义视图函数时,将该 `<>` 里面的内容作为参数传入到函数里面即可。
比如路由 `/user/Harry` 后面想要根据不同的用户名,返回不同的数据。这种情况可以用变量来代替名字部分:`@app.route('/user/<username>')`。
这时 `username` 传入不同的值时,比如依次传入 `Harry`、`Ron`、`Hermione`,那么对应的路由就变为:`/user/Harry`、`/user/Ron`、`/user/Hermione`。
定义动态路由
@app.route("/user/<username>")
def user_info(username):
return f"User {username} is select info."
访问:`http://127.0.0.1:5000/user/Ron`
查看服务端日志,会有一条返回信息:`User Ron is select info.`。
### 限定类型
如果希望限定输入的动态字段的类型,可以使用 <类型:变量名> 来实现,例如如果希望某个字段只能是整数,那么可以写为 `/user/<int:user_id>`。
限定类型的动态路由
类型限定为整型
@app.route("/user/<int:user_id>")
def user_id(user_id):
# 展示给定的用户 ID,ID 为整型
return f"User ID is {user_id}"
类型限定为 path(可以包含 /)
@app.route('/path/<path:sub_path>')
def show_subpath(sub_path):
# 展示 path 后的子路由
return f'Subpath is {sub_path}'
Flask 支持在路由上使用的类型有 `int`、`float`、`string`、`path`。`path` 类型是字符串的一种,不同的是它可以包含正斜线。
路由规则
Flask 的 URL 规则基于 Werkzeug 的路由模块。可以确保形成的 URL 是唯一的,并且基于 Apache 规定的先例。
@app.route('/about')
def about():
return 'About Page'
@app.route('/hogwarts/')
def hello_hogwarts():
return 'Hello Hogwarts'
if name == '__main__':
app.run()
这两个路由定义的例子看起来类似,其实是不一样的。
在第二个例子中,路由的尾部使用斜杠 `(/)`。因此,它成为一个规范的URL。这时 Flask 会自动进行重定向。当在浏览器的地址栏中不输入 `/` 时,会自动在尾部加上一个斜杠。也就是在浏览器的地址栏中输入` / `和不输入` /`的效果是一样的。
而第一个例子中,路由的尾部没有 `/`。那么访问的时候,在浏览器的地址栏中不能输入` /`,否则会产生 “Not Found” 的错误。这样可以保持 URL 唯一。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。