Flask中@app.route()的methods参数详解

诸神缄默不语-个人CSDN博文目录

在 Flask 中,@app.route 是用于定义路由的核心装饰器,开发者可以通过它为应用指定 URL 映射及相应的处理函数。在处理 HTTP 请求时,不同的业务场景需要支持不同的 HTTP 方法,而 @app.routemethods 参数正是用于指定路由支持的 HTTP 方法。

本文将详细介绍 @app.route 的默认设置、methods 参数的显式设置,以及常见的 HTTP 方法及其使用场景,并结合代码示例进行说明。

文章目录

  • 1. 默认 `methods` 参数
  • 2. 显式设置 `methods` 参数
  • 3. 常见的 HTTP 方法
    • 3.1 `GET` 方法
    • 3.2 `POST` 方法
    • 3.3 `PUT` 方法
    • 3.4 `DELETE` 方法
    • 3.5 `PATCH` 方法
    • 3.6 `OPTIONS` 方法
  • 4. 综合示例
  • 5. 注意事项
  • 6. 总结

1. 默认 methods 参数

如果没有显式指定 methods 参数,Flask 默认只支持 GET 方法。GET 方法用于从服务器获取资源,一般不会携带请求体,也不会对服务器资源进行修改。

示例:

from flask import Flaskapp = Flask(__name__)@app.route("/")
def index():return "默认只支持 GET 请求"if __name__ == "__main__":app.run(debug=True)
  • 访问方式:通过浏览器或使用工具(如 curl)发送 GET 请求:
    curl http://127.0.0.1:5000/
    
  • 结果:服务器返回 "默认只支持 GET 请求"
  • 限制:如果发送其他方法(如 POST),会返回 405 Method Not Allowed

2. 显式设置 methods 参数

通过 methods 参数,可以为路由显式指定支持的 HTTP 方法。如果需要同时支持 GETPOST 等方法,可以使用列表或元组来传递。

示例:

from flask import Flask, requestapp = Flask(__name__)@app.route("/submit", methods=["GET", "POST"])
def submit():if request.method == "GET":return "这是一个 GET 请求"elif request.method == "POST":return "这是一个 POST 请求"if __name__ == "__main__":app.run(debug=True)
  • 访问方式
    • 发送 GET 请求:
      curl http://127.0.0.1:5000/submit
      
      返回结果:这是一个 GET 请求
    • 发送 POST 请求:
      curl -X POST http://127.0.0.1:5000/submit
      
      返回结果:这是一个 POST 请求

3. 常见的 HTTP 方法

3.1 GET 方法

  • 作用:从服务器获取资源。
  • 特点
    • 请求无副作用,不改变服务器上的资源。
    • 数据通常通过 URL 参数传递(query string)。
  • 示例
    @app.route("/get_example", methods=["GET"])
    def get_example():return "GET 请求返回的数据"
    

3.2 POST 方法

  • 作用:向服务器发送数据(如表单、JSON 数据),通常用于创建资源。
  • 特点
    • 数据放在请求体中,不显示在 URL 中。
    • 通常会对服务器上的资源产生影响。
  • 示例
    @app.route("/post_example", methods=["POST"])
    def post_example():data = request.json  # 假设发送 JSON 数据return f"接收到的 POST 数据:{data}"
    

3.3 PUT 方法

  • 作用:用于更新服务器上的资源(也可以创建资源)。
  • 特点
    • 语义上表示替换整个资源。
  • 示例
    @app.route("/put_example", methods=["PUT"])
    def put_example():data = request.jsonreturn f"PUT 请求更新了数据:{data}"
    

3.4 DELETE 方法

  • 作用:删除服务器上的资源。
  • 特点
    • 通常用于删除特定资源。
  • 示例
    @app.route("/delete_example", methods=["DELETE"])
    def delete_example():return "资源已删除"
    

3.5 PATCH 方法

  • 作用:用于部分更新资源。
  • 特点
    • PUT 不同,PATCH 只更新资源的某些字段。
  • 示例
    @app.route("/patch_example", methods=["PATCH"])
    def patch_example():data = request.jsonreturn f"PATCH 请求部分更新了数据:{data}"
    

3.6 OPTIONS 方法

  • 作用:返回服务器支持的 HTTP 方法。
  • 特点
    • 通常用于跨域请求的预检(CORS)。
  • 示例
    @app.route("/options_example", methods=["OPTIONS"])
    def options_example():return "OPTIONS 请求返回的响应头"
    

4. 综合示例

下面是一个支持多种 HTTP 方法的完整示例:

from flask import Flask, requestapp = Flask(__name__)@app.route("/", methods=["GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS"])
def handle_requests():if request.method == "GET":return "GET 请求"elif request.method == "POST":return "POST 请求"elif request.method == "PUT":return "PUT 请求"elif request.method == "DELETE":return "DELETE 请求"elif request.method == "PATCH":return "PATCH 请求"elif request.method == "OPTIONS":return "OPTIONS 请求"if __name__ == "__main__":app.run(debug=True)

5. 注意事项

  1. methods 参数必须是列表或元组

    methods=["GET", "POST"]
    
  2. 未指定 methods 默认只支持 GET 方法

    @app.route("/")  # 等价于 methods=["GET"]
    
  3. 请求方法区分大小写
    Flask 的 methods 参数值需要大写,比如 "GET",否则会导致路由匹配失败。

6. 总结

  • Flask 的 @app.route 默认只支持 GET 方法。
  • 通过 methods 参数,可以显式指定支持的 HTTP 方法。
  • 常见 HTTP 方法有 GETPOSTPUTDELETEPATCHOPTIONS,每种方法有不同的应用场景。
  • 动态处理不同 HTTP 方法,可以结合 request.method 编写逻辑。

希望通过这篇文章,你能够掌握 Flask 中 @app.routemethods 参数的用法。如果有其他疑问,欢迎在评论区交流!

在这里插入图片描述

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

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

相关文章

工业相机镜头选型知识详解

工业相机在机器视觉、自动化生产和检测等领域扮演着重要角色,而镜头作为工业相机的关键组件,其选型直接影响到成像效果和系统的整体性能。在本篇博客中,我们将详细讲解工业相机镜头选型的相关知识,帮助您在实际应用中选择最合适的…

羊城杯2020 easycon

打开是这样一个页面,这样情况一般先想到的就是目录扫描了 好吧,不知道为什么gobuster扫不出来 dirsearch扫出个index.php和index.php/login,都访问一下 提醒我这个文件有一句话木马 怪怪的,不知道为什么weevely连接不上 蚁剑吧&am…

顶顶通呼叫中心中间件mod_cti模块安全增强,预防盗打风险(mod_cti基于FreeSWITCH)

文章目录 前言联系我们mod_cti版本支持安全加强说明 前言 FreeSWITCH暴露在公网最大的风险就是被不法之人盗打 出现盗打的主要原因以下几点: 分机密码太简单或者密码泄露了拨号方案配置不合理sofia配置错误 所以我们给顶顶通呼叫中心中间件添加了安全加强功能&am…

面试基础篇---迭代器,yield, tcp, 等

1.谈谈python的装饰器,迭代器,yield? 迭代器在内存中通常是一次性遍历的,也就是说,一旦遍历完所有元素,它就会停止工作,不可再用。 惰性计算:生成器按需生成数据,即只有在…

软件测试之测试用例

文章目录 测试用例测试用例的编写总结 测试用例 测试用例:描述测试点执行的文档(测试输入、执行条件、预期结果等) 作用 1.测试点能被精准执行 2.便于团队合作测试用例核心内容 用例编号、用例标题、所属模块、优先级、前置条件、测试步骤、测试数据、预期结果 测试用例的编写…

微机接口课设——基于Proteus和8086的打地鼠设计(8255、8253、8259)

原理图设计 汇编代码 ; I/O 端口地址定义 IOY0 EQU 0600H IOY1 EQU 0640H IOY2 EQU 0680HMY8255_A EQU IOY000H*2 ; 8255 A 口端口地址 MY8255_B EQU IOY001H*2 ; 8255 B 口端口地址 MY8255_C EQU IOY002H*2 ; 8255 C 口端口地址 MY8255_MODE EQU IOY003H*2 ; …

I.MX6U 启动方式详解

一、启动方式选择 BOOT 的处理过程是发生在 I.MX6U 芯片上电以后,芯片会根据 BOOT_MODE[1:0]的设置 来选择 BOOT 方式。 BOOT_MODE[1:0]的值是可以改变的,有两种方式,一种是改写 eFUSE(熔 丝),一种是修改相应的 GPIO 高低电平。第一种修改 eFUSE 的方式只能修改一次,后面就…

下载运行Vue开源项目vue-pure-admin

git地址:GitHub - pure-admin/vue-pure-admin: 全面ESMVue3ViteElement-PlusTypeScript编写的一款后台管理系统(兼容移动端) 安装pnpm npm install -g pnpm # 国内 淘宝 镜像源 pnpm config set registry https://registry.npmmirror.com/…

springboot-starter版本升级es版本问题

一、背景说明 版本漏洞处理,springboot版本升级,es版本暂不升级,但是pom引用中es版本一直为7.17.15高版本,不想显示声明版本,定位具体问题,最后还是重新定义了版本进行处理。 二、异常情况 这里看4.4.18是…

模型优化之知识蒸馏

文章目录 知识蒸馏优点工作原理示例代码 知识蒸馏优点 把老师模型中的规律迁移到学生模型中,相比从头训练,加快了训练速度。另一方面,如果学生模型的训练精度和老师模型差不多,相当于得到了规模更小的学生模型,起到模…

Hadoop集群(HDFS集群、YARN集群、MapReduce​计算框架)

一、 简介 Hadoop主要在分布式环境下集群机器,获取海量数据的处理能力,实现分布式集群下的大数据存储和计算。 其中三大核心组件: HDFS存储分布式文件存储、YARN分布式资源管理、MapReduce分布式计算。 二、工作原理 2.1 HDFS集群 Web访问地址&…

使用 acme.sh 申请域名 SSL/TLS 证书完整指南

使用 acme.sh 申请域名 SSL/TLS 证书完整指南 简介为什么选择 acme.sh 和 ZeroSSL?前置要求安装过程 步骤一:安装 acme.sh步骤二:配置 ZeroSSL 证书申请 方法一:手动 DNS 验证(推荐新手使用)方法二&#xf…

# 起步专用 - 哔哩哔哩全模块超还原设计!(内含接口文档、数据库设计)

↑ 上方下载文档 (大小374KB) 接口文档预览 (超过50个接口) 一、数据库25张表er-关系清晰构图!(tip: 鼠标右键图片 > 放大图像) 二、难点/经验 详细说明 热门评论排序评论点赞列表|DTO封装经验分享|精华接口文档说明 组员都说喜欢分档对应枚举码 如果这篇文章…

掌握 Ansys ACP 中的参考方向:简化复杂的复合材料设计

概括 在复合材料分析领域,精度至关重要,尤其是在定义纤维方向和铺层时。Ansys ACP(Ansys Composite PrepPost)提供了强大的工具来建立参考方向,这是实现精确结构模拟的关键步骤。在本博客中,我们将揭开在 …

牵手红娘:牵手App红娘助力“牵手”,脱单精准更便捷

随着互联网的普及,现代青年的社交圈层加速扩大,他们的恋爱观也正经历着前所未有的转变。在繁忙的工作之余,人们希望能够找到一种既高效又真诚的交友方式。于是,线上交友平台成为了他们寻找爱情的新选择。让不同文化背景、不同工作…

动态规划<四> 回文串问题(含对应LeetcodeOJ题)

目录 引例 其余经典OJ题 1.第一题 2.第二题 3.第三题 4.第四题 5.第五题 引例 OJ 传送门Leetcode<647>回文子串 画图分析&#xff1a; 使用动态规划解决 原理&#xff1a;能够将所有子串是否是回文的信息保存在dp表中 在使用暴力方法枚举出所有子串&#xff0c;是…

突发!!!GitLab停止为中国大陆、港澳地区提供服务,60天内需迁移账号否则将被删除

GitLab停止为中国大陆、香港和澳门地区提供服务&#xff0c;要求用户在60天内迁移账号&#xff0c;否则将被删除。这一事件即将引起广泛的关注和讨论。以下是对该事件的扩展信息&#xff1a; 1. 背景介绍&#xff1a;GitLab是一家全球知名的软件开发平台&#xff0c;提供代码托…

一网多平面

“一网多平面”是一种网络架构概念&#xff0c;具体指的是在一张物理网络之上&#xff0c;逻辑划分出“1N”个平面。以下是对“一网多平面”的详细解释&#xff1a; 定义与构成 01一网多平面 指的是在统一的物理网络基础设施上&#xff0c;通过逻辑划分形成多个独立的网络平面…

shell脚本定义特殊字符导致执行mysql文件错误的问题

记得有一次版本发布过程中有提供一个sh脚本用于一键执行sql文件&#xff0c;遇到一个shell脚本定义特殊字符的问题&#xff0c;sh脚本的内容类似以下内容&#xff1a; # 数据库ip地址 ip"127.0.0.1" # 数据库密码 cmdbcmdb!#$! smsm!#$!# 执行脚本文件&#xff08;参…

R语言数据分析案例46-不同区域教育情况回归分析和探索

一、研究背景 教育是社会发展的基石&#xff0c;对国家和地区的经济、文化以及社会进步起着至关重要的作用。在全球一体化进程加速的今天&#xff0c;不同区域的教育发展水平呈现出多样化的态势。这种差异不仅体现在教育资源的分配上&#xff0c;还表现在教育成果、教育投入与…