当前位置: 首页 > 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 代码工程下载…...

奇安信浏览器HEVC硬件解码优化指南:基于JM9显卡的实战配置

1. 为什么需要HEVC硬件解码优化 最近在折腾4K视频播放时&#xff0c;发现电脑风扇狂转&#xff0c;CPU占用直接飙到90%以上。查了下才发现是浏览器软解HEVC视频导致的&#xff0c;这种场景下显卡却在旁边"看戏"。后来发现奇安信浏览器搭配JM9显卡的硬件解码方案&…...

如何改cad文件版本?盘点三个实用方法

在日常 CAD 绘图工作中&#xff0c;经常会遇到高版本 CAD 文件在低版本软件中无法打开、显示异常的问题。本文为大家整理了3 种实用的 CAD 版本转换方法&#xff0c;包含工具批量转换与两种代码实现方式&#xff0c;满足不同场景下的版本转换需求。方法一&#xff1a;汇帮 CAD …...

Go语言的HTTP服务器:从基础到高级

Go语言的HTTP服务器&#xff1a;从基础到高级 HTTP 服务器的重要性 在现代 Web 开发中&#xff0c;HTTP 服务器是构建 Web 应用程序的核心组件。一个高性能、可靠的 HTTP 服务器可以&#xff1a; 处理客户端请求&#xff0c;返回响应支持各种 HTTP 方法和状态码提供路由和中…...

Res-Unet实战:在医学图像分割任务中,为什么以及如何用ResNet50替换普通卷积层?

Res-Unet在医学图像分割中的深度优化实践 医学图像分割一直是计算机视觉领域最具挑战性的任务之一。当我们在处理CT扫描、MRI图像或病理切片时&#xff0c;传统U-Net架构虽然表现出色&#xff0c;但随着网络深度增加&#xff0c;梯度消失和特征退化问题逐渐显现。这时&#xff…...

基于深度学习的田间杂草检测系统(YOLOv12/v11/v8/v5模型)(源码+lw+部署文档+讲解等)

摘要田间杂草的生长不仅会影响作物的产量和质量&#xff0c;还会对农田管理造成巨大挑战。传统的杂草检测方法多依赖人工观察&#xff0c;效率低下且受主观因素影响。为了提高田间杂草的检测效率与准确性&#xff0c;本文提出了一种基于深度学习的田间杂草检测系统&#xff0c;…...

QuiX公司取得光子量子计算纠错重大突破

QuiX Quantum公司周四宣布&#xff0c;该公司已成功演示了光子量子计算机中首个低于阈值的错误缓解技术&#xff0c;这一突破被认为有助于实现可扩展的容错量子系统。QuiX表示&#xff0c;其方法将物理量子比特的错误率降低到与大规模量子计算兼容的水平。这些研究结果是在QuiX…...

2.4.快速排序——先分区再递归,为什么它平均这么快却可能退化?

2.4.快速排序——先分区再递归&#xff0c;为什么它平均这么快却可能退化&#xff1f; 系列&#xff1a;搜索与排序 | 第 4 篇&#xff0c;共 16 篇 难度&#xff1a;⭐⭐⭐☆☆ 中等 标签&#xff1a;排序 快速排序 分治 随机化 三路快排 上一篇&#xff1a;2.3.插入排序——像…...

终极指南:如何免费解锁Cursor Pro功能,彻底解决API限制问题

终极指南&#xff1a;如何免费解锁Cursor Pro功能&#xff0c;彻底解决API限制问题 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve …...

星闪实战指南:10分钟掌握WS63 SDK任务调度与调试技巧

1. 星闪WS63 SDK任务调度基础 第一次接触星闪WS63 SDK的任务调度功能时&#xff0c;我完全被各种API搞晕了。经过几个项目的实战&#xff0c;才发现这套任务管理系统设计得非常巧妙。简单来说&#xff0c;它就像个智能管家&#xff0c;能帮你把各种工作安排得井井有条。 任务调…...

终极TypeScript类型安全指南:LiveTerm接口定义与类型检查最佳实践

终极TypeScript类型安全指南&#xff1a;LiveTerm接口定义与类型检查最佳实践 【免费下载链接】LiveTerm &#x1f4bb; Build terminal styled websites in minutes! 项目地址: https://gitcode.com/gh_mirrors/li/LiveTerm LiveTerm是一个基于Next.js的终端风格网站构…...