软件测试|测试平台开发-Flask入门:Flask动态路由

前言

之前我们介绍了flask发送http请求,以及flaskURL的详解,我们使用的路由都是固定的,一个路径和一个视图函数绑定,当访问这条路径时会触发相应的处理函数。但是当我们要处理更为复杂的情况时,比如我们有多个用户,我们要访问这几个用户的个人信息,我们不可能为每一个用户设计一个固定的路由,这样会造成大量的重复代码,复用性也不强,因为我们就需要通过动态路由来实现我们的代码复用,减少重复的代码量。在本文中,我们将详细介绍Flask动态路由的使用方法和示例。

静态路由的缺点

假设我们有一个博客网站,我们希望根据不同的用户名称来展示不同用户的个人主页,如果我们使用静态路由来处理,代码如下:

python 复制代码
from flask import Flask

app = Flask(__name__)


@app.route('/user/muller')
def show_user_muller():
    return 'My name is muller'


@app.route('/user/salah')
def show_user_salah():
    return 'My name is salah'


@app.route('/user/sicca')
def show_user_sicca():
    return 'My name is sicca'


if __name__ == '__main__':
    app.run()

上述的代码示例表示有三个用户muller,salah,sicca,提供了三个路由访问这三个用户的信息,如下表:

路由 视图函数
/user/muller show_user_muller()
/user/salah show_user_salah()
/user/sicca show_user_sicca()

我们可以很明显看出函数的实现逻辑是一样的,代码复用性很差。

动态路由

动态路由是指在Flask应用中,URL中的一部分可以作为参数传递给视图函数,从而使得我们可以根据URL中不同的部分来生成不同的响应。这样,我们就可以实现更加灵活和动态的Web应用。

动态路由大致格式如下:

python 复制代码
/prefix/<参数>

它是一个模板,可以匹配多条路径,将参数放置在符号 < > 之间

我们可以将上面的静态路由优化一下改成动态路由,代码如下:

python 复制代码
from flask import Flask

app = Flask(__name__)


@app.route('/user/<name>')
def show_user(name):
    return 'My name is %s' % name


if __name__ == '__main__':
    app.run()
  • 匹配所有以 /user/ 开头的路径
  • 视图函数 show_user 有一个参数 name
  • 假设实际的路径是 /user/muller,那么会与 /user/ 匹配成功,并且将 muller 存储到参数 name 中

运行脚本,浏览器访问网址'http://127.0.0.1:5000/user/muller',结果如下图:

访问网址'http://127.0.0.1:5000/user/Messi',结果如下图:

动态路由转换器

在 Flask 中,动态路由的参数类型默认是 string,但是也可以指定其他类型,比如数字 int 浮点数 float等,如下表:

类型 说明
string 默认,可以不用写
int 整数
float 浮点数
path 和 string 相似,但接受斜线

转换器示例

python 复制代码
from flask import Flask

app = Flask(__name__)

@app.route('/user/<name>')
def show_user(name):
    return 'My name is %s' % name


@app.route('/age/<int:age>')
def show_age(age):
    return 'age is %d' % age


@app.route('/price/<float:price>')
def show_price(price):
    return 'price is %f' % price


@app.route('/path/<path:name>')
def show_path(name):
    return 'path is %s' % name


if __name__ == '__main__':
    app.run()

我们可以通过浏览器访问不同的网址验证我们的动态路由是否成功创建。

多个参数的动态路由示例

一个动态路由也可以包含多个参数,如下:

python 复制代码
@app.route('/all/<path:path>/name/<string:name>/age/<int:age>/price/<float:price>')
def show_all(name, path, age, price):
    return f"path is {path}\nname is {name}\nage is {age}\nprice is {price}"

我们也可以通过浏览器访问网址来检验是否成功创建了该动态路由,比如'http://127.0.0.1:5000/all/user/name/muller/age/33/price/334.5'

总结

本文介绍了Flask动态路由的概念和用法。通过动态路由,我们可以根据URL中的不同部分来动态生成视图和响应内容,从而实现更加灵活和动态的Web应用。在实际应用中,可以根据需要传递不同的参数,以满足不同的业务需求。希望本文能够帮助你更好地理解和使用Flask中的动态路由功能。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

相关推荐
tang&23 分钟前
【Python自动化测试】Selenium常用函数详解
开发语言·python·selenium
卜锦元1 小时前
Golang项目开发过程中好用的包整理归纳(附带不同包仓库地址)
开发语言·后端·golang
Tony Bai5 小时前
“我曾想付钱给 Google 去工作”—— Russ Cox 深度访谈:Go 的诞生、演进与未来
开发语言·后端·golang
路边草随风6 小时前
milvus向量数据库使用尝试
人工智能·python·milvus
newobut6 小时前
vscode远程调试python程序,基于debugpy库
vscode·python·调试·debugpy
APIshop7 小时前
用 Python 把“API 接口”当数据源——从找口子到落库的全流程实战
开发语言·python
serendipity_hky7 小时前
【SpringCloud | 第2篇】OpenFeign远程调用
java·后端·spring·spring cloud·openfeign
嘟嘟MD7 小时前
程序员副业 | 2025年11月复盘
后端·创业
SadSunset7 小时前
(15)抽象工厂模式(了解)
java·笔记·后端·spring·抽象工厂模式
汝生淮南吾在北7 小时前
SpringBoot+Vue养老院管理系统
vue.js·spring boot·后端·毕业设计·毕设