当前位置: 首页 > news >正文

Flask 动态路由、请求数据接收、视图函数返回值详解

一、动态路由

在前面的博客中,我们学习了如何创建基本的 Flask 应用,并定义了一些简单的路由。但有时候,我们需要更加灵活的路由,能够根据用户请求的不同来动态生成响应。Flask 提供了动态路由的功能,使我们能够轻松处理这种需求。

使用动态路由参数

动态路由是指路由中的某些部分可以是变量,这样在处理请求时可以获取这些变量的值。例如:

from flask import Flaskapp = Flask(__name__)@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> 都是动态路由参数。当用户访问 /user/john 时,username 参数将被设置为 'john';当用户访问 /post/1 时,post_id 参数将被设置为 1。在Flask中,除了int之外,还有一些其他的数据类型可以用于动态路由。以下是一些常见的数据类型和它们的描述:

数据类型描述
int接受整数
float接受浮点数
path类似字符串,但可以包含斜杠(/)
string默认类型,接受没有斜杠的字符串
uuid接受UUID字符串

二、获取请求中的数据

1. 在 GET 请求中获取参数

在 Flask 中,可以使用 request.args 对象来获取 GET 请求中传递的参数。这些参数通常是通过查询字符串(Query String)传递的。

from flask import Flask, requestapp = Flask(__name__)@app.route('/search')
def search():query = request.args.get('q')return f'Search query: {query}'

用户可以通过访问 /search?q=Flask 来传递搜索参数。

2. 在 POST 请求中获取表单参数(Content-Type=multipart/form-data Content-Type=application/x-www-form-urlencoded)
from flask import Flask, requestapp = Flask(__name__)@app.route('/login', methods=['POST'])
def login():username = request.form.get('username')password = request.form.get('password')return f'Username: {username}, Password: {password}'
3. 在 POST 请求中获取raw数据(Content-Type=application/json Content-Type=text/plain)
from flask import Flask, requestapp = Flask(__name__)@app.route('/raw', methods=['POST'])
def get_raw_data():data = request.datareturn f'Raw data received: {data.decode()}'
4. 在 POST 请求中获取文件数据(Content-Type=multipart/form-data)
from flask import Flask, requestapp = Flask(__name__)@app.route('/upload', methods=['POST'])
def upload_file():if 'file' not in request.files:return 'No file part'file = request.files['file']if file.filename == '':return 'No selected file'return f'File {file.filename} uploaded successfully'
5. 获取请求中的header和cookie
from flask import Flask, requestapp = Flask(__name__)@app.route('/get_data')
def get_data():cookie_data = request.cookies.get('my_cookie')header_data = request.headers.get('User-Agent')return f'Cookie data: {cookie_data}, User-Agent: {header_data}'

三、视图函数返回值

视图函数的返回值会自动转换为一个响应对象。如果返回值是一个字符串,那 么会被转换为一个包含作为响应体的字符串、一个 200 OK 出错代码 和一 个 text/html 类型的响应对象。如果返回值是一个字典或者列表, 那么会调用 jsonify() 来产生一个响应。以下是转换的规则:

  • 如果视图返回的是一个响应对象,那么就直接返回它。

  • 如果返回的是一个字符串,那么根据这个字符串和缺省参数生成一个用于 返回的响应对象。

  • 如果返回的是一个迭代器或者生成器,那么返回字符串或者字节,作为流 响应对待。

  • 如果返回的是一个字典或者列表,那么使用 jsonify() 创建一个响应对象。

  • 如果返回的是一个元组,那么元组中的项目可以提供额外的信息。元组中 必须至少包含一个项目,且项目应当由 (response, status) 、 (response, headers) 或者 (response, status, headers) 组 成。 status 的值会重载状态代码, headers 是一个由额外头部 值组成的列表或字典。

  • 如果以上都不是,那么 Flask 会假定返回值是一个有效的 WSGI 应用并把 它转换为一个响应对象。

  • 如果想要在视图内部掌控响应对象的结果,那么可以使用 make_response() 函数。

from flask import Flask, jsonifyapp = Flask(__name__)# 返回字符串
@app.route('/string')
def return_string():return 'Hello, Flask!'# 返回元组 (response, status, headers)
@app.route('/tuple')
def return_tuple():return 'Hello, Flask!', 200, {'Content-Type': 'text/plain'}# 返回 Response 对象
@app.route('/response')
def return_response():return jsonify({'message': 'Hello, Flask!'})
重定向

在 Flask 中,可以使用 redirect 函数来进行重定向。

from flask import Flask, redirect, url_forapp = Flask(__name__)@app.route('/redirect_example')
def redirect_example():# 重定向到 /new_location 路由return redirect('/new_location')@app.route('/new_location')
def new_location():return 'New location!'

总结

在本篇博客中,我们学习了如何使用 Flask 处理动态路由,以及在请求中获取参数的方法。无论是通过动态路由参数,还是通过请求对象的不同属性,Flask 提供了丰富的工具来处理各种请求和路由需求。

相关文章:

Flask 动态路由、请求数据接收、视图函数返回值详解

一、动态路由 在前面的博客中&#xff0c;我们学习了如何创建基本的 Flask 应用&#xff0c;并定义了一些简单的路由。但有时候&#xff0c;我们需要更加灵活的路由&#xff0c;能够根据用户请求的不同来动态生成响应。Flask 提供了动态路由的功能&#xff0c;使我们能够轻松处…...

Transformer 简介

Transformer 是 Google 在 2017 年底发表的论文 Attention Is All You Need 中所提出的 seq2seq 模型。Transformer 模型的核心是 Self-Attention 机制&#xff0c;能够处理输入序列中的每个元素&#xff0c;并能计算其与序列中其他元素的交互关系的方法&#xff0c;从而能够更…...

LLVM学习笔记(64)

4.4.3.3.3. 设置寄存器类对类型的行为 1679行调用computeRegisterProperties()来计算寄存器类的衍生属性。TargetLoweringBase的容器RegisterTypeForVT、RegClassForVT以及NumRegistersForVT用于记录原生支持每个ValueType目标机器寄存器类的信息&#xff0c;即类型对应的寄存…...

深度学习TensorFlow2基础知识学习前半部分

目录 测试TensorFlow是否支持GPU&#xff1a; 自动求导&#xff1a; 数据预处理 之 统一数组维度 定义变量和常量 训练模型的时候设备变量的设置 生成随机数据 交叉熵损失CE和均方误差函数MSE 全连接Dense层 维度变换reshape 增加或减小维度 数组合并 广播机制&#…...

Linux系统---简易伙伴系统

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C/C》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 一、题目要求 1.采用C语言实现 2.伙伴系统采用free_area[11]数组来组织。要求伙伴内存最小为一个页面&#xff0c;页面大小为4KB…...

Redis使用Lua脚本

Lua脚本 redis可以支持lua脚本&#xff0c;可以使用lua脚本来将几个命令整合为一个整体来执行&#xff0c;这样可以使得多个命令原子操作&#xff0c;且可以减少网络开销 Lua的数据类型 Lua是一个动态类型的语言&#xff0c;一个变量可以存储任何类型的值&#xff0c;类型有&am…...

macos安装metal 加速版 pytorch

categories: [Python] tags: Python MacOS 写在前面 试试 m3 的 metal 加速效果如何 Mac computers with Apple silicon or AMD GPUsmacOS 12.3 or laterPython 3.7 or laterXcode command-line tools: xcode-select --install 安装 Python: conda-forge brew install minif…...

【学习笔记】lyndon分解

摘抄自quack的ppt。 这部分和 s a sa sa的关联比较大&#xff0c;可以加深对 s a sa sa的理解。 Part 1 如果字符串 s s s的字典序在 s s s以及 s s s的所有后缀中是最小的&#xff0c;则称 s s s是一个 lyndon \text{lyndon} lyndon串。 lyndon \text{lyndon} lyndon分解&a…...

21、命令执行

文章目录 一、命令执行概述1.1 基本定义1.2 原理1.3 两个条件1.4 命令执行漏洞产生的原因1.5 管道符号和通用命令符 二、远程命令执行2.1 远程命令执行相关函数2.2 远程命令执行漏洞的利用 三、系统命令执行3.1 相关函数3.2 系统命令执行漏洞利用 四、命令执行漏洞防御 一、命令…...

Qexo博客后台管理部署

Qexo博客后台管理部署 个人主页 个人博客 参考文档 https://www.oplog.cn/qexo/本地部署 采用本地Docker部署管理本地Hexo 下载代码包 若无法下载使用科学工具下载到本地在上传到服务器 wget https://github.com/Qexo/Qexo/archive/refs/tags/3.0.1.zip# 解压 unzip Qexo…...

最小生成树prim

最小生成树&#xff08;三&#xff09;Prim算法及存储结构_哔哩哔哩_bilibili⁤ 311 最小生成树 Prim 算法_哔哩哔哩_bilibili #include <iostream> #include <queue> #include <string> #include <stack> #include <vector> #include <set…...

实用篇 | 一文学会人工智能中API的Flask编写(内含模板)

----------------------- &#x1f388;API 相关直达 &#x1f388;-------------------------- &#x1f680;Gradio: 实用篇 | 关于Gradio快速构建人工智能模型实现界面&#xff0c;你想知道的都在这里-CSDN博客 &#x1f680;Streamlit :实用篇 | 一文快速构建人工智能前端展…...

Si24R03—低功耗 SOC 芯片(集成RISC-V内核+2.4GHz无线收发器)

Si24R03是一款高度集成的低功耗SOC芯片&#xff0c;其集成了基于RISC-V核的低功耗MCU和工作在2.4GHz ISM频段的无线收发器模块。 MCU模块具有低功耗、Low Pin Count、宽电压工作范围&#xff0c;集成了13/14/15/16位精度的ADC、LVD、UART、SPI、I2C、TIMER、WUP、IWDG、RTC等丰…...

C# Winform 日志系统

目录 一、效果 1.刷新日志效果 2.单独日志的分类 3.保存日志的样式 二、概述 三、日志系统API 1.字段 Debug.IsScrolling Debug.Version Debug.LogMaxLen Debug.LogTitle Debug.IsConsoleShowLog 2.方法 Debug.Log(string) Debug.Log(string, params object[]) …...

【Java 基础】27 XML 解析

文章目录 1.SAX 解析器1&#xff09;什么是 SAX2&#xff09;SAX 工作流程初始化实现事件处理类解析 3&#xff09;示例代码 2.DOM 解析器1&#xff09;什么是 DOM2&#xff09;DOM 工作流程初始化解析 XML 文档操作 DOM 树 3&#xff09;示例代码 总结 在项目开发中&#xff0…...

地图服务 ArcGIS API for JavaScript基础用法全解析

地图服务 ArcGIS API for JavaScript基础用法全解析 前言 在接触ArcGIS之前&#xff0c;开发web在线地图时用过Leaflet来构建地图应用&#xff0c;作为一个轻量级的开源js库&#xff0c;在我使用下来Leaflet还有易懂易用的API文档&#xff0c;是个很不错的选择。在接触使用Ar…...

docker学习(八、mysql8.2主从复制遇到的问题)

在我配置主从复制的时候&#xff0c;遇到了一直connecting的问题。 起初可能是我ip配置的不对&#xff0c;slave_io_running一直connecting。&#xff08;我的环境&#xff1a;windows中安装了wsl&#xff0c;是ubuntu环境的&#xff0c;在wsl中装了miniconda&#xff0c;mini…...

React-hook-form-mui(三):表单验证

前言 在上一篇文章中&#xff0c;我们介绍了react-hook-form-mui的基础用法。本文将着重讲解表单验证功能。 react-hook-form-mui提供了丰富的表单验证功能&#xff0c;可以通过validation属性来设置表单验证规则。本文将详细介绍validation的三种实现方法&#xff0c;以及如何…...

【私域运营秘籍】4大用户调研方法,让你轻松掌握用户心理!

我们常说私域运营的核心是用户运营。根据二八法则&#xff0c;20%的超级用户贡献企业80%的利润。因此&#xff0c;企业应该根据用户的价值贡献来有针对性地进行运营。 然而&#xff0c;在实际的私域运营中&#xff0c;我们不仅需要找出贡献价值不同的用户&#xff0c;还可以从…...

2.8寸 ILI9341 TFTLCD 学习移植到STM32F103C8T6

2.8寸 ILI9341 TFTLCD 学习移植到STM32F103C8T6 文章目录 2.8寸 ILI9341 TFTLCD 学习移植到STM32F103C8T6前言第1章 LCD简介1.1 LCD硬件接口介绍 第2章 LCD指令介绍第3章 LCD 8080驱动方式3.1 8080写时序3.2 8080读时序 第4章 LCD 驱动代码部分4.1 修改代码部分4.2 代码工程下载…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

在rocky linux 9.5上在线安装 docker

前面是指南&#xff0c;后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会

在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...

消息队列系统设计与实践全解析

文章目录 &#x1f680; 消息队列系统设计与实践全解析&#x1f50d; 一、消息队列选型1.1 业务场景匹配矩阵1.2 吞吐量/延迟/可靠性权衡&#x1f4a1; 权衡决策框架 1.3 运维复杂度评估&#x1f527; 运维成本降低策略 &#x1f3d7;️ 二、典型架构设计2.1 分布式事务最终一致…...

密码学基础——SM4算法

博客主页&#xff1a;christine-rr-CSDN博客 ​​​​专栏主页&#xff1a;密码学 &#x1f4cc; 【今日更新】&#x1f4cc; 对称密码算法——SM4 目录 一、国密SM系列算法概述 二、SM4算法 2.1算法背景 2.2算法特点 2.3 基本部件 2.3.1 S盒 2.3.2 非线性变换 ​编辑…...