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

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

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

相关推荐
丕羽1 小时前
【Pytorch】基本语法
人工智能·pytorch·python
2401_865854881 小时前
iOS应用想要下载到手机上只能苹果签名吗?
后端·ios·iphone
bryant_meng1 小时前
【python】Distribution
开发语言·python·分布函数·常用分布
AskHarries2 小时前
Spring Boot集成Access DB实现数据导入和解析
java·spring boot·后端
2401_857622662 小时前
SpringBoot健身房管理:敏捷与自动化
spring boot·后端·自动化
程序员阿龙2 小时前
基于SpringBoot的医疗陪护系统设计与实现(源码+定制+开发)
java·spring boot·后端·医疗陪护管理平台·患者护理服务平台·医疗信息管理系统·患者陪护服务平台
程思扬2 小时前
为什么Uptime+Kuma本地部署与远程使用是网站监控新选择?
linux·服务器·网络·经验分享·后端·网络协议·1024程序员节
阿华的代码王国2 小时前
【Spring】——SpringBoot项目创建
java·spring boot·后端·启动类·target文件
m0_594526303 小时前
Python批量合并多个PDF
java·python·pdf
九鼎科技-Leo3 小时前
什么是 ASP.NET Core?与 ASP.NET MVC 有什么区别?
windows·后端·c#·asp.net·mvc·.net