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

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

image.png

前言

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

静态路由的缺点

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

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应用。

动态路由大致格式如下:

/prefix/<参数>

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

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

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',结果如下图:

image.png

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

image.png

动态路由转换器

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

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

转换器示例

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()

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

多个参数的动态路由示例

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

@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中的动态路由功能。

相关文章
|
22天前
|
Java 关系型数据库 数据库连接
Mybatis+MySQL动态分页查询数据经典案例(含代码以及测试)
Mybatis+MySQL动态分页查询数据经典案例(含代码以及测试)
22 1
|
29天前
|
JSON 数据格式 Python
如何在Flask框架中定义路由和处理请求?
如何在Flask框架中定义路由和处理请求?
14 0
|
2月前
|
资源调度 测试技术 Linux
一款接口自动化神器—开源接口测试平台Lim(Less is More)
一款接口自动化神器—开源接口测试平台Lim(Less is More)
120 2
|
1天前
|
开发框架 中间件 网络架构
Flask路由机制深度剖析
【4月更文挑战第15天】Flask是一款轻量级Web框架,其路由机制是核心功能之一,负责将URL映射到处理函数。路由通过`@app.route()`装饰器定义,如`@app.route(&#39;/&#39;)`将根URL映射到`index`函数。动态路由如`/user/&lt;username&gt;`允许传入变量,支持`methods`、`defaults`和`strict_slashes`等参数定制行为。Flask还提供多种路由转换器(如`int`、`float`)确保URL参数类型。`url_for()`函数用于动态构建URL。理解这些机制有助于高效构建和扩展Flask Web应用。
|
1天前
|
前端开发 数据挖掘 API
使用Python中的Flask框架进行Web应用开发
【4月更文挑战第15天】在Python的Web开发领域,Flask是一个备受欢迎的轻量级Web框架。它简洁、灵活且易于扩展,使得开发者能够快速地构建出高质量的Web应用。本文将深入探讨Flask框架的核心特性、使用方法以及在实际开发中的应用。
|
26天前
|
缓存 运维 Serverless
应用研发平台EMAS产品常见问题之测试检查更新没有反应如何解决
应用研发平台EMAS(Enterprise Mobile Application Service)是阿里云提供的一个全栈移动应用开发平台,集成了应用开发、测试、部署、监控和运营服务;本合集旨在总结EMAS产品在应用开发和运维过程中的常见问题及解决方案,助力开发者和企业高效解决技术难题,加速移动应用的上线和稳定运行。
|
30天前
|
机器学习/深度学习 人工智能 监控
视觉智能平台常见问题之体验产品的美颜测试关掉如何解决
视觉智能平台是利用机器学习和图像处理技术,提供图像识别、视频分析等智能视觉服务的平台;本合集针对该平台在使用中遇到的常见问题进行了收集和解答,以帮助开发者和企业用户在整合和部署视觉智能解决方案时,能够更快地定位问题并找到有效的解决策略。
22 1
|
1月前
|
存储 安全 JavaScript
使用Python的Flask框架开发验证码登录功能
使用Python的Flask框架开发验证码登录功能
27 0
|
1月前
|
存储 数据可视化 API
Python项目开发:Flask基于Python的天气数据可视化平台
Python项目开发:Flask基于Python的天气数据可视化平台
41 0
|
2月前
|
数据库 开发者 Python
Python在Web开发中的应用:Flask与Django框架介绍与实践
Python在Web开发中的应用:Flask与Django框架介绍与实践

热门文章

最新文章