Flask 路由基础和封装

Flask 路由

Flask中的路由是用来定义应用程序中的 URL 和处理函数之间的映射关系的,而URL则是用户访问应用程序的入口点。通过路由,我们可以将用户访问的 URL 映射到对应的视图函数上,从而实现不同的功能。

一、路由基础

1.定义路由:

我们可以使用 @app.route() 装饰器来定义路由。例如:

@app.route('/')
def index():return 'Hello, World!'

这样就定义了一个根路径 / 对应 index() 视图函数。

2.动态路由:

除了静态路径,Flask还支持动态路径。我们可以在路径中定义变量部分,然后在试图函数中通过参数获取这个动态值,如:

@app.route('/user/<username>')
def hello_user(username):return f'hello {username}!'
3.URL构建:

除了定义路由,我们还可以使用 url_for() 函数根据视图函数名生成相应的URL。

from flask import Flask,redirect,url_for,render_template
app = Flask(__name__)@app.route('/admin')
def hello_admin():return 'hello admin'@app.route('/guest/<guest>')
def hello_guest(guest):return f'hello {guest} as guest'@app.route('/user/<name>')
def hello_user(name):if name=='admin':return redirect(url_for('hello_admin'))else:return redirect(url_for('hello_guest',guest=name))if __name__ == '__main__':app.run(debug=True)

在上面代码中, url_for('hello_admin') 会生成路径 /adminurl_for('hello_guest',guest=name) 会生成 /guest/<guest>。这样做可以避免在代码中硬编码URL,提高了灵活性和可维护性。

4.URL转换器:

Flask提供了多种URL转换器,如 int、float、path 等,可以用于更复杂的路由需求。
例如: @app.route('/post/<int:post_id>') 表示 post_id 参数必须是整数类型。

5.路由前缀:

有时我们需要为一组相关的路由添加公共的前缀,如 /api/v1/users。
这可以通过使用 Blueprint 实现,在注册Blueprint时指定前缀。

from flask import Flask, Blueprint# 创建一个Flask应用
app = Flask(__name__)# 创建一个Blueprint对象,并指定一个前缀
blueprint = Blueprint('my_blueprint', __name__, url_prefix='/api/user')# 在这个 blueprint 中定义一个路由
@blueprint.route('/hello')
def hello():return 'Hello, World!'# 将 blueprint 注册到应用上
app.register_blueprint(blueprint)if __name__ == '__main__':app.run(debug=True)

当你访问/api/user/hello时,会调用hello函数并返回Hello, World!

总之,Flask的路由机制提供了灵活强大的URL管理功能,可以帮助我们高效地组织和管理应用程序的URLs。合理利用路由和URL可以提高代码的可读性、可维护性和可扩展性。

二、路由的封装

对于Flask中的路由,除了直接使用@app.route() 装饰器定义路由外,我们还可以将其进行封装,以提高代码的可读性和可维护性。

一种常见的封装方式是创建一个独立的文件或模块来管理路由,然后在主应用程序中导入并使用。例如:

# app.py
from flask import Flask
from routes import init_routesapp = Flask(__name__)
init_routes(app)if __name__ == '__main__':app.run()
# routes.py
from flask import Blueprint, render_templatebp = Blueprint('main', __name__)@bp.route('/')
def index():return render_template('index.html')@bp.route('/about')
def about():return render_template('about.html')def init_routes(app):app.register_blueprint(bp)

在这个例子中:

我们在 routes.py 文件中创建了一个 Blueprint 对象 bpBlueprintFlask 提供的一种组织和管理路由的机制,可以将相关的路由和视图函数封装在一起。

routes.py 中,我们定义了两个路由函数 index()about()

app.py 中,我们导入 init_routes() 函数并调用它,将 app 对象传递给它。这个函数会将 bp Blueprint 注册到 app 上,从而将路由信息与主应用程序关联起来。

这样做的好处是:

将路由相关的代码集中在一个单独的文件或模块中,使得主应用程序更加简洁和可读。

可以在 routes.py 中添加更多的路由和视图函数,而不需要改动 app.py 中的代码。

如果需要对路由进行修改或扩展,只需要在 routes.py 中进行即可,而不会影响主应用程序的其他部分。

这种路由的封装方式是 Flask 开发中常见的一种模式,可以帮助我们更好地组织和管理应用程序的路由逻辑。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/7316.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

查看微信小程序主包大小

前言 略 查看微信小程序主包大小 在微信开发者工具右上角找到“详情->基本信息” 查看微信小程序主包构成 通过微信开发者工具中的“代码依赖分析”工具查看

置身事内 书摘

信息的重要性&#xff1a;所谓山高皇帝远&#xff0c;上级领导不可能掌握和处理所有信息&#xff0c;故常常不得不依赖下级提供的信息&#xff0c;内容是否可靠&#xff0c;上级不见得知道&#xff0c;因此可能被下级牵着鼻子走。但因为信息复杂&#xff0c;不易处理&#xff0…

Unity 性能优化之光照优化(七)

提示&#xff1a;仅供参考&#xff0c;有误之处&#xff0c;麻烦大佬指出&#xff0c;不胜感激&#xff01; 文章目录 前言一、测试目的一、实时光源是什么&#xff1f;二、开始测试1.场景中只有一个光照的数值情况2.添加4个点光源后4.结果 总结 前言 实时光源数量越多&#x…

分享一个国内可用的AIGC网站,免费无限制,支持AI绘画

背景 AIGC作为一种基于人工智能技术的自然语言处理工具&#xff0c;近期的热度直接沸腾&#x1f30b;。 作为一个AI爱好者&#xff0c;翻遍了各大基于AIGC的网站&#xff0c;终于找到一个免费&#xff01;免登陆&#xff01;手机电脑通用&#xff01;国内可直接对话的AIGC&am…

保持亮灯:监控工具如何确保 DevOps 中的高可用性

在快速发展的 DevOps 领域&#xff0c;保持高可用性 (HA) 至关重要。消费者期望应用程序具有全天候响应能力和可访问性。销售损失、客户愤怒和声誉受损都是停机的后果。为了使 DevOps 团队能够在问题升级为中断之前主动检测、排除故障并解决问题&#xff0c;监控工具成为这种情…

nginx--tcp负载均衡

mysql负载均衡 安装mysql yum install -y mariadb-server systemctl start mariadb systemctl enable mariadb ss -ntl创建数据库并授权 MariaDB [(none)]> create database wordpress; Query OK, 1 row affected (0.00 sec)MariaDB [(none)]> grant all privileges o…

设计模式(十一):外观模式

设计模式&#xff08;十一&#xff09;&#xff1a;外观模式 1. 外观模式的介绍2. 外观模式的类图3. 外观模式的实现3.1 创建一个接口3.2 创建接口的实现3.3 创建一个外观类3.4 测试 1. 外观模式的介绍 外观模式&#xff08;Facade Pattern&#xff09;属于结构型模式&#xf…

数据结构与算法之经典排序算法

一、简单排序 在我们的程序中&#xff0c;排序是非常常见的一种需求&#xff0c;提供一些数据元素&#xff0c;把这些数据元素按照一定的规则进行排序。比如查询一些订单按照订单的日期进行排序&#xff0c;再比如查询一些商品&#xff0c;按照商品的价格进行排序等等。所以&a…

lua的类型,lua_State,函数调用

类型 lua中的数据可以这样分为两位&#xff1a;值类型和引用类型。引用类型创建时需要从堆上分配内存&#xff0c;复制时只需要复制指针&#xff0c;分配的内存由GC负责维护生命期。 所有lua类型都用一个union来表示&#xff1a; /* ** Union of all Lua values */ typedef …

IT养生知识之:子午流注

《子午流注口诀》 肺寅大卯胃辰宫&#xff0c; 脾巳心午小未中&#xff0c; 申膀酉肾心包戌&#xff0c; 亥焦子胆丑肝通。 何为子午流注&#xff1f; 子午流注是中医圣贤发现的一种规律&#xff0c;中医认为人体中十二条经脉对应着每日的十二个时辰&#xff0c;由于时辰在…

【Osek网络管理测试】[TG3_TC5]等待总线睡眠状态_1

&#x1f64b;‍♂️ 【Osek网络管理测试】系列&#x1f481;‍♂️点击跳转 文章目录 1.环境搭建2.测试目的3.测试步骤4.预期结果5.测试结果 1.环境搭建 硬件&#xff1a;VN1630 软件&#xff1a;CANoe 2.测试目的 验证DUT在满足进入等待睡眠状态的条件时是否进入该状态 …

C#算法之堆排序算法

算法释义&#xff1a;堆排序算法的基本原理&#xff0c;其实就是利用二叉堆的数据结构&#xff0c;通过构建一个最大堆&#xff0c;然后将堆顶元素&#xff08;最大值&#xff09;与末尾元素交换&#xff0c;接着缩小堆的大小并重新调整堆&#xff0c;直到堆中只剩下一个元素。…

WP Rocket插件下载:加速您的WordPress网站,提升用户体验

在互联网速度决定用户体验的今天&#xff0c;一个快速加载的网站对于吸引和保留访问者至关重要。WP Rocket插件&#xff0c;作为一款专为WordPress设计的高性能缓存插件&#xff0c;提供了一套完整的解决方案&#xff0c;帮助您优化网站性能&#xff0c;提升用户体验。 [WP Ro…

Django实验(远程访问+图片显示)

众所周知&#xff0c;Python除了不能生孩子什么都会。Python也是可以做web服务的。 Python做web有一个重点优势是&#xff1a;做一个快速的AI Demo。 第一步&#xff1a;安装一个版本5.0以上django 第二步&#xff1a;构建咱们的Django工程&#xff0c;我取名为BBQ django-adm…

flask 前后台文件多张图片api;AIGC streamlit、gradio多图片页面展示

1、flask 前后台文件多张图片api send_file 传递zip: send_file(zip_data, mimetype=‘application/zip’, as_attachment=True, download_name=‘images.zip’) from flask import Flask, Response, request,send_file from PIL import Image import torch import io from …

【copilot 使用指南 - @workspace】

为什么需要workspace 默认情况下&#xff0c;copilot只能分析当前文件中的代码内容&#xff0c; 那么如何让copliot 跨文件分析&#xff0c;分析整个项目&#xff0c;分析整个代码目录下的代码&#xff0c;就要用到workspace&#xff0c;举例 &#xff1a;假设如下代码 index…

如何使用ArcGIS Pro进行选房分析

无论是研究城市规划布局还是寻找理想的住房&#xff0c;都需要综合考虑购物、医疗、教育和休闲等多方面因素&#xff0c;此时我们的GIS软件就可以派上用场了&#xff0c;这里为大家介绍一下如何使用 ArcGIS Pro 进行选房分析&#xff0c;希望能对你有所帮助。 数据来源 教程所…

解决mac出现npm install 卡在“sill idealTree buildDeps“的问题

问题出现场景&#xff1a; 在新建一个项目尝试npm install命令时&#xff0c;一直卡在“sill idealTree buildDeps“ 尝试过的无效解决方案包括&#xff1a; 切换/关闭梯子重启更换网络更换npm源更新删除 package.json 最终解决方案&#xff1a; 引起问题的原因是MacOS设置中…

sqlx执行案例

SQLx简介 SQLx是Rust语言中的一个异步SQL数据库连接库&#xff0c;它支持多种数据库&#xff0c;如PostgreSQL、MySQL和SQLite。SQLx提供了简单的API和异步执行查询的能力&#xff0c;使得Rust程序员可以轻松地与数据库交互1。 本章节以PostgreSQL为例。 目录结构 cargo.tom…

uniapp生成二维码(uQRCode)与自定义绘制样式与内容

二维码生成使用了一款基于Javascript环境开发的插件 uQRCode &#xff0c;它不仅适用于uniapp&#xff0c;也适用于所有Javascript运行环境的前端应用和Node.js。 uQRCode 插件地址&#xff1a;https://ext.dcloud.net.cn/plugin?id1287 目录 1、npm安装 2、通过import引…