软件测试|测试平台开发-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中的动态路由功能。

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

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

相关推荐
Yan-英杰2 分钟前
百度搜索和文心智能体接入DeepSeek满血版——AI搜索的新纪元
图像处理·人工智能·python·深度学习·deepseek
weixin_307779131 小时前
Azure上基于OpenAI GPT-4模型验证行政区域数据的设计方案
数据仓库·python·云计算·aws
玩电脑的辣条哥2 小时前
Python如何播放本地音乐并在web页面播放
开发语言·前端·python
m0_748256144 小时前
SpringBoot
java·spring boot·后端
多想和从前一样5 小时前
Django 创建表时 “__str__ ”方法的使用
后端·python·django
涛粒子6 小时前
Spring Bean 生命周期的执行流程
java·后端·spring
小喵要摸鱼6 小时前
【Pytorch 库】自定义数据集相关的类
pytorch·python
bdawn6 小时前
深度集成DeepSeek大模型:WebSocket流式聊天实现
python·websocket·openai·api·实时聊天·deepseek大模型·流式输出
Jackson@ML6 小时前
Python数据可视化简介
开发语言·python·数据可视化
mosquito_lover16 小时前
怎么把pyqt界面做的像web一样漂亮
前端·python·pyqt