【PythonWeb开发】Flask请求中传递参数到视图函数的方法总结。

        在Flask中,传入参数主要有两种常见的方式,即通过GET请求和POST请求。

一、GET请求传递参数

(1)URL路径中获取

        这种类型的参数通常称为路径参数或路由参数,它们是URL路径的一部分,通过尖括号<parameter_name>定义在路由规则中。

@app.route('/user/<username>/post/<int:post_id>')
def show_post(username, post_id):# 这里可以直接通过函数参数获取路径中的变量return f"Username: {username}, Post ID: {post_id}"

        如果你需要更复杂的路径参数处理,或者在处理请求之后动态获取路径参数,可以使用request.view_args,它是一个字典,包含了所有通过URL路径传递的参数。

@app.route('/some/route/<path:custom_path>')
def handle_custom_path(custom_path):# 除了直接作为参数,你也可以通过view_args获取print(request.view_args)  # 输出: {'custom_path': 'the/path/from/url'}return f"The custom path is: {custom_path}"

(2)请求参数中获取

        GET请求通常将参数附加在URL后面,通过问号?分隔URL和参数,多个参数之间使用&连接。这种方式适用于请求不会改变服务器上的资源,且参数长度有限制(因为参数直接出现在URL中)。

http://example.com/api/data?key1=value1&key2=value2

使用request.args字典对象来获取GET参数。有三种使用方法:

  • get方法,如果该参数不存在,则可以提供一个默认值,避免抛出异常。
  • get_list方法,当一个参数可能在同一请求中有多个值时,返回一个包含所有值的列表。
  • 中括号,这种方式与普通字典访问类似,取不到会抛出异常。
from flask import request@app.route('/api/data')
def get_data():key1 = request.args.get('key1')  # 获取key1的值,如果不存在则返回Nonekey2 = request.args['key2']      # 直接通过键访问,如果不存在会抛出KeyErrorkey3 = request.args.get_list('key3')  # 取出存在同名key的所有值return f"Key1: {key1}, Key2: {key2}, Key3: {key3}"

二、POST请求传递参数

        POST请求通常用于提交表单或发送可能改变服务器状态的数据。参数不在URL中显示,而是放在请求体中。POST请求可以承载更大的数据量,且对数据类型的支持更灵活。

POST请求有两种常见的编码格式:

  • application/x-www-form-urlencoded:表单数据,类似于GET请求的查询字符串格式。
  • multipart/form-data:用于文件上传,也可以包含普通字段。

(1)上传表单数据

对于表单使用request.form

  • 中括号方式
  • get方法

(2)上传JSON数据

对于JSON格式的数据(当Content-Type为application/json时),使用request.get_json()

from flask import request, jsonify@app.route('/api/data', methods=['POST'])
def post_data():if request.is_json:  # is_json属性可以判断返回的是否是json数据data = request.get_json()          # 获取JSON格式的POST数据key1 = data.get('key1')           # 如果数据是JSON对象,则这样获取else:key1 = request.form.get('key1')    # 获取表单形式的POST数据return jsonify({"received_key1": key1})

(3)上传视频数据

使用request.files来取出上传的文件。

@app.route('/upload_video', methods=['POST'])
def upload_video():video_file = request.files['video']  # 假设表单中文件字段名为'video'if video_file.filename == '':return "No video selected", 400# 可以在这里添加额外的验证,比如检查文件大小、视频格式等if video_file and allowed_file(video_file.filename, video_extensions):  # 假设allowed_file检查文件类型和大小filename = secure_filename(video_file.filename)video_file.save(os.path.join(app.config['VIDEO_UPLOAD_FOLDER'], filename))return "Video uploaded successfully"else:return "Invalid video file or other error", 400

(4)上传图片数据

        使用request.files来取出上传的文件。上传图片数据的过程与上述视频上传相似,只是可能在验证阶段会特别检查图片的格式。

def allowed_file(filename):"""检查文件扩展名是否允许上传"""ALLOWED_EXTENSIONS = { 'jpg', 'jpeg', 'png', 'gif'}return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
@app.route('/upload_image', methods=['POST'])
def upload_image():image_file = request.files['image']  # 假设表单中文件字段名为'image'if image_file.filename == '':return "No image selected", 400# 验证图片格式等if image_file and allowed_file(image_file.filename, image_extensions):  # 使用适合的图片扩展名集合filename = secure_filename(image_file.filename)image_file.save(os.path.join(app.config['IMAGE_UPLOAD_FOLDER'], filename))return "Image uploaded successfully"else:return "Invalid image file or other error", 400

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

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

相关文章

CV每日论文--2024.6.21

1、An Image is Worth More Than 16x16 Patches: Exploring Transformers on Individual Pixels 中文标题&#xff1a;一张图像的价值超过 16x16 的补丁&#xff1a;在单个像素上探索 Transformers 简介&#xff1a;这项工作并非介绍一种新的方法&#xff0c;而是呈现了一项有…

@ControllerAdvice:你可以没用过,但是不能不了解

1.概述 最近在梳理Spring MVC相关扩展点时发现了ControllerAdvice这个注解&#xff0c;用于定义全局的异常处理、数据绑定、数据预处理等功能。通过使用 ControllerAdvice&#xff0c;可以将一些与控制器相关的通用逻辑提取到单独的类中进行集中管理&#xff0c;从而减少代码重…

WinForm 2048

WinForm 2048 是一个基于 Windows 窗体应用程序&#xff08;WinForms&#xff09;实现的经典益智游戏——2048。这个游戏通过简单的滑动或点击操作&#xff0c;将相同数字的方块合并&#xff0c;以生成更大的数字方块&#xff0c;最终目标是创造出一个数字为 2048 的方块。 游…

电商爬虫API的定制开发:满足个性化需求的解决方案

一、引言 随着电子商务的蓬勃发展&#xff0c;电商数据成为了企业决策的重要依据。然而&#xff0c;电商数据的获取并非易事&#xff0c;特别是对于拥有个性化需求的企业来说&#xff0c;更是面临诸多挑战。为了满足这些个性化需求&#xff0c;电商爬虫API的定制开发成为了解决…

【杂记-浅谈IPv6地址】

IPv6地址 一、IPv6地址概述二、IPv6地址结构三、IPv6地址分类四、IPv6地址配置五、IPv6的应用场景 一、IPv6地址概述 IPv6&#xff0c;Internet Protocol version 6&#xff0c;是互联网协议的第六版&#xff0c;旨在克服IPv4地址耗尽的挑战&#xff0c;并为互联网的未来发展提…

Apache Tomcat 10.1.25 新版本发布 java 应用服务器

Tomcat 是一个小型的轻量级应用服务器&#xff0c;在中小型系统和并发访问用户不是很多的场合下被普遍使用&#xff0c;是开发和调试 JSP 程序的首选。对于一个初学者来说&#xff0c;可以这样认为&#xff0c;当在一台机器上配置好 Apache 服务器&#xff0c;可利用它响应对 H…

uniapp 使用uview 插件

看创建项目版本vue2 、 vue3 Button 按钮 | uView 2.0 - 全面兼容 nvue 的 uni-app 生态框架 - uni-app UI 框架 1. npm install uview-ui2.0.36 2. // main.js&#xff0c;注意要在use方法之后执行 import uView from uview-ui Vue.use(uView) // 如此配置即可 uni.$u.c…

服务治理入门

服务治理的生命周期 在微服务架构中&#xff0c;服务治理是确保服务正常运行和高效协作的关键。服务治理的生命周期包括以下五个阶段&#xff1a;服务注册、服务发现、服务续约/心跳、服务被动剔除和服务主动剔除。 服务注册 服务提供者在启动时&#xff0c;需要将其服务信…

Prometheus的infratest、UAT、PRE、PRD分别代表什么

Prometheus的infratest、UAT、PRE、PRD分别代表什么 在Prometheus监控系统中,infratest、UAT、PRE和PRD通常指的是不同阶段的测试环境,分别对应基础设施测试(Infrastructure Test)、用户验收测试(User Acceptance Test)、预生产环境(Pre-production)和生产环境(Produ…

构建RISC-V工具链:基本步骤

在这一节内容中&#xff0c;我们将介绍如何构建一个64位的RISC-V工具链。在这个过程中&#xff0c;我们将编译默认的RISC-V工具链&#xff0c;而不修改指令集。 1. 安装必要的软件包 首先&#xff0c;需要安装一些必要的软件包。在终端中运行以下命令&#xff1a; sudo apt-g…

vue3-cropperjs图片裁剪工具-用户上传图片截取-(含预览视频)

效果图 上传图片弹窗预览 对于这个上传图片样式可以参考 官方原代码 官网传送入口 Upload 上传 | Element Plus (element-plus.org) <template><el-uploadclass"upload-demo"dragaction"https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6…

免费分享一套SpringBoot+Vue电影院售票管理系统【论文+源码+SQL脚本】,帅呆了~~

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的SpringBootVue电影院售票管理系统&#xff0c;分享下哈。 项目视频演示 【免费】SpringBootVue电影院售票管理系统 Java毕业设计_哔哩哔哩_bilibili【免费】SpringBootVue电影院售票管理系统 Java毕业设计…

DriverManager.getConnection用法总结

DriverManager.getConnection用法总结 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 在Java编程中&#xff0c;DriverManager.getConnection是一个用于建立与…

《Windows API每日一练》5.5 插入符号

当你向程序中输入文本时&#xff0c;通常会有下划线、竖线或方框指示你输入的下一个字符将出现在屏幕上的位置。你也许认为这是“光标”&#xff0c;但在编写Windows程序时&#xff0c;你必须避免这种习惯。在Windows中&#xff0c;它被称为“插入符号”&#xff08;caret&…

市政道路乙级资质申报的筹备与执行

一、筹备阶段 1. 政策研读与自我评估 详细了解资质标准&#xff1a;仔细阅读最新的资质申报指南和相关法规&#xff0c;明确乙级资质的具体要求&#xff0c;包括企业资本、技术人员配置、过往业绩等。自我评估&#xff1a;对照资质标准&#xff0c;对企业现状进行全面评估&am…

河南省乙级建筑设计资质标准案例分析

河南省乙级建筑设计资质标准案例分析 虽然我没有具体的河南省乙级建筑设计资质的详细案例分析&#xff0c;但我可以根据一般性的资质标准和流程&#xff0c;构建一个简化的案例分析框架&#xff0c;帮助理解乙级建筑设计资质的获取和应用。 案例背景&#xff1a; 假设“华豫…

如何评估LabVIEW需求中功能的必要性和可行性

评估LabVIEW需求中功能的必要性和可行性涉及多个方面的分析&#xff0c;包括需求的重要性、技术可行性、资源需求以及潜在风险。以下是一个详细的评估方法&#xff1a; ​ 一、功能必要性评估 需求来源和目的&#xff1a; 来源&#xff1a;需求来自哪里&#xff1f;是客户、市…

Lua 绕过元表

Lua 绕过元表&#xff0c;直接访问 table 的字段。 绕过元表 rawset(table, index, value)&#xff0c;在不触发元方法的情况下&#xff0c;设置 table[index] 的值为 value。 rawget(table, index)&#xff0c;在不触发元方法的情况下&#xff0c;获取 table[index] 的值。…

写一个坏越的个人天地(二)

小红书上搜了下博客,感觉好像没有让自己喜欢的。昨天刚好学了点grid布局,来试试 菜单栏直接使用el-menu 下边布局就用grid局部了,这块初步想法是轮播+你的天气和我的天气+自我介绍 天气的话,这边要先找一下有没有天气的api 我这边百度搜了个聚合的api,一天可以免费调用5…

Linux系统iptables应用SNAT和DNAT

一、SNAT 1.SNAT应用环境 局域网主机共享单个公网IP地址接入Internet (私有IP不能在Internet中正常路由) 2.SNAT原理 源地址转换&#xff0c;根据指定条件修改数据包的源IP地址&#xff0c;通常被叫做源映谢 数据包从内网发送到公网时&#xff0c;SNAT会把数据包的源IP由私…