Flask路由机制详解:从基础到进阶
创作时间:
作者:
@小白创作中心
Flask路由机制详解:从基础到进阶
引用
CSDN
1.
https://m.blog.csdn.net/naihe_fish/article/details/143274694
Flask是一个轻量级的Web应用框架,提供了简单而强大的路由机制,使得开发者能够轻松地将用户请求的URL映射到Python函数。本文将详细介绍Flask中的路由机制,包括基本路由、动态路由、HTTP方法处理以及路由函数的返回类型等内容。
什么是路由?
在Web应用中,路由决定了用户请求的URL应该由哪个函数来处理。当用户在浏览器中输入一个URL或者点击一个链接时,Web服务器需要知道如何处理这个请求,这就是路由的作用。
Flask中的路由
Flask使用装饰器@app.route()来定义路由。这个装饰器告诉Flask哪个URL应该触发对应的函数。
基本路由
最基本的路由是将URL直接映射到函数。
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return 'Hello, Flask!'
if __name__ == '__main__':
app.run(debug=True)
在上面这个例子中,我们定义了一个路由/,当用户访问应用的根目录时,会触发home函数,并返回字符串"Hello, Flask!"。
动态路由
Flask还允许我们定义动态路由,即URL中包含变量的部分。
@app.route('/user/<username>')
def show_user_profile(username):
return f'User {username}'
@app.route('/post/<int:post_id>')
def show_post(post_id):
return f'Post {post_id}'
在这两个例子中,<username>和<int:post_id>是动态部分,Flask会将URL中对应的部分作为参数传递给函数。<username>可以匹配任何字符串,而<int:post_id>则限制只能匹配整数。
测试结果如下
路由规则支持不同类型的参数和匹配规则,post_id前的int为路由规则的类型,以下为常见的路由规则:
- 字符串(默认): 匹配任意字符串。
- 整数(int:name): 匹配整数值。
- 浮点数(float:value): 匹配浮点数值。
- 路径(path:name): 匹配任意字符,包括斜杠/。
路由中的HTTP方法
默认情况下,路由只响应GET请求。Flask允许我们指定路由响应特定的HTTP方法。
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
return do_the_login()
else:
return show_the_login_form()
上面的例子中,/login路由可以响应GET和POST请求。根据请求的方法,执行不同的函数。测试结果如下。
路由函数返回
视图函数可以返回多种类型的响应:
- 字符串:返回纯文本响应。
- HTML:返回 HTML 页面。
- JSON:返回 JSON 数据。
- Response 对象:自定义响应。
附全篇所有代码,以供测试使用
from flask import Flask, request, jsonify, Response
app = Flask(__name__)
@app.route('/')
def home():
return 'Hello, Flask!'
@app.route('/user/<username>')
def show_user_profile(username):
return f'User {username}'
@app.route('/post/<int:post_id>')
def show_post(post_id):
return f'Post {post_id}'
@app.route('/json')
def json_response():
data = {'key': 'value'}
return jsonify(data)
@app.route('/custom')
def custom_response():
response = Response('Custom response with headers', status=200)
response.headers['X-Custom-Header'] = 'Value'
return response
def do_the_login():
return f'post请求,进行登录'
def show_the_login_form():
return f'get请求,展示登录表单'
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
return do_the_login()
else:
return show_the_login_form()
if __name__ == '__main__':
app.run(debug=True)
测试结果如下
热门推荐
反诈课堂 | 轻信校园贷陷阱,小心掉进负债深渊
法系车优缺点有哪些?二手法系车到底值不值得买?
医者解读|正确应对“白细胞减少”
2025职称评审论文准备要点,一篇搞定!
重载AGV:现代物流中的力量与精准
姜太公钓鱼的智慧——如何用耐心和策略赢得人生
数字资源管理系统:数字化资产采集、存储、管理、共享与利用
销售议价怎么管理客户
史上首次,物理学家实现了“时间翻转”,将导致新量子技术诞生
精准监测空气质量:电化学气体传感器在环境监测中的角色
《西游记》中的四大天王:佛教神祇为何在道教天庭任职?
excel怎么使用datedif
技术追“新” 发展逐“绿”——2024年潍坊经济社会发展年终观察④
锁定低碳,港口风机叶片里的新“绿”意
春节自驾游潮汕:反向团圆之旅攻略
2024年上海市住房租赁市场分析报告
车辆过户最简单最省钱的方法
世界双相情感障碍日 | 天才在左,疯子在右?游走在两极的“灵魂”!
分动箱损坏维修指南:诊断、方法与技术要求全解析
麻将读牌攻略:如何通过对手的立直宣言牌判断其听牌型
高盛最新报告:想要盘活经济,就让女人多干活
华佗刮骨疗伤:历史真相与医学传说
MBTI性格与职场匹配指南:16型人格该避开的工作环境
乡村老饭桌的喜和忧
冯唐:西汉名臣,何以与李广并列
解读历史典故:冯唐易老,李广难封的含义
NBA球员得分预测-基于线性回归、KNN回归、决策树回归、随机森林回归
木头菜板和竹子菜板哪个更健康
迈向未来:RAG技术在AI应用中的高效集成与实践
打造舒适安全的老人房:适老化设计与布局策略