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

news2024/12/24 17:27:18

诸神缄默不语-个人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 Flask

app = 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, request

app = 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.json
        return 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.json
        return 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, request

app = 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.coloradmin.cn/o/2264843.html

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

相关文章

JavaSE---String(含一些源码)

(一)字符串构造 我们如何创建一个String类型的对象?有三种: String s1new String("hello"); //直接new一个String对象String s2"hello"; //使用常量串构造final char[] chars {h,e,l,l,o}; Strin…

0.96寸OLED显示屏详解

我们之前讲了 LCD1602,今天我们将它的进阶模块——OLED。它接线更少,性能更强,也能显示中文和图像了。 大家在学习单片机的时候是否会遇到调试的问题呢?例如 “这串代码我到底运行成功了没有” ,我相信很多刚开始学习…

用un-app写的动漫风格的登录界面

动漫风格的的登录、注册界面模板&#xff0c;使用uni-app编写&#xff0c;直接复制粘贴即可。 废话不多说&#xff0c;代码如下&#xff1a; login.vue文件 <template><view class"content"><view class"tab-box"><text class"c…

Pytorch | 从零构建ParNet/Non-Deep Networks对CIFAR10进行分类

Pytorch | 从零构建ParNet/Non-Deep Networks对CIFAR10进行分类 CIFAR10数据集ParNet架构特点优势应用 ParNet结构代码详解结构代码代码详解SSEParNetBlock 类DownsamplingBlock 类FusionBlock 类ParNet 类 训练过程和测试结果代码汇总parnet.pytrain.pytest.py 前面文章我们构…

【服务器】linux服务器管理员查看用户使用内存情况

【服务器】linux服务器管理员查看用户使用硬盘内存情况 1、查看所有硬盘内存使用情况 df -h2、查看硬盘挂载目录下所有用户内存使用情况 du -sh /public/*3、查看某个用户所有文件夹占用硬盘内存情况 du -sh /public/zhangsan/*

[搜广推]王树森推荐系统——其他召回通道

地理位置召回 GeoHash召回 想法&#xff1a;用户可能对附近发生的事感兴趣 方法&#xff1a;对经纬度的编码&#xff0c;地图上一个长方形区域 索引&#xff1a;GeoHash -> 优质笔记列表(按时间倒排) 这条召回通道没有个性化 同城召回 想法&#xff1a;用户可能对同…

重温设计模式--外观模式

文章目录 外观模式&#xff08;Facade Pattern&#xff09;概述定义 外观模式UML图作用 外观模式的结构C 代码示例1C代码示例2总结 外观模式&#xff08;Facade Pattern&#xff09;概述 定义 外观模式是一种结构型设计模式&#xff0c;它为子系统中的一组接口提供了一个统一…

OpenCV学习——图像融合

import cv2 as cv import cv2 as cvbg cv.imread("test_images/background.jpg", cv.IMREAD_COLOR) fg cv.imread("test_images/forground.png", cv.IMREAD_COLOR)# 打印图片尺寸 print(bg.shape) print(fg.shape)resize_size (1200, 800)bg cv.resize…

ECharts热力图-笛卡尔坐标系上的热力图,附视频讲解与代码下载

引言&#xff1a; 热力图&#xff08;Heatmap&#xff09;是一种数据可视化技术&#xff0c;它通过颜色的深浅变化来表示数据在不同区域的分布密集程度。在二维平面上&#xff0c;热力图将数据值映射为颜色&#xff0c;通常颜色越深表示数据值越大&#xff0c;颜色越浅表示数…

进程间关系与守护进程

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 进程间关系与守护进程 收录于专栏[Linux学习] 本专栏旨在分享学习Linux的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 1. 进程组 什…

LightGBM分类算法在医疗数据挖掘中的深度探索与应用创新(上)

一、引言 1.1 医疗数据挖掘的重要性与挑战 在当今数字化医疗时代,医疗数据呈爆炸式增长,这些数据蕴含着丰富的信息,对医疗决策具有极为重要的意义。通过对医疗数据的深入挖掘,可以发现潜在的疾病模式、治疗效果关联以及患者的健康风险因素,从而为精准医疗、个性化治疗方…

【文档搜索引擎】缓冲区优化和索引模块小结

开机之后&#xff0c;首次制作索引会非常慢&#xff0c;但后面就会快了 重启机器&#xff0c;第一次制作又会非常慢 这是为什么呢&#xff1f; 在 parserContent 里面&#xff0c;我们进行了一个读文件的操作 计算机读取文件&#xff0c;是一个开销比较大的操作&#xff0c; …

html+css网页设计 旅游 移动端 雪花旅行社4个页面

htmlcss网页设计 旅游 移动端 雪花旅行社4个页面 网页作品代码简单&#xff0c;可使用任意HTML辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作&#xff09;。 获取源码 …

3 JDK 常见的包和BIO,NIO,AIO

JDK常见的包 java.lang:系统基础类 java.io:文件操作相关类&#xff0c;比如文件操作 java.nio:为了完善io包中的功能&#xff0c;提高io性能而写的一个新包 java.net:网络相关的包 java.util:java辅助类&#xff0c;特别是集合类 java.sql:数据库操作类 IO流 按照流的流向分…

从零创建一个 Django 项目

1. 准备环境 在开始之前&#xff0c;确保你的开发环境满足以下要求&#xff1a; 安装了 Python (推荐 3.8 或更高版本)。安装 pip 包管理工具。如果要使用 MySQL 或 PostgreSQL&#xff0c;确保对应的数据库已安装。 创建虚拟环境 在项目目录中创建并激活虚拟环境&#xff…

ubuntu20.04安装imwheel实现鼠标滚轮调速

ubuntu20.04安装imwheel实现鼠标滚轮调速 Ubuntu 系统自带的设置中仅具备调节鼠标速度的功能&#xff0c;而无调节鼠标滚轮速度的功能。其默认的鼠标滚轮速度较为缓慢&#xff0c;在查看文档时影响尚可接受&#xff0c;但在快速浏览网页时&#xff0c;滚轮速度过慢会给用户带来…

GitLab的安装与卸载

目录 GitLab安装 GitLab使用 使用前可选操作 修改web端口 修改Prometheus端口 使用方法 GitLab的卸载 环境说明 系统版本 CentOS 7.2 x86_64 软件版本 gitlab-ce-10.8.4 GitLab安装 Gitlab的rpm包集成了它需要的软件&#xff0c;简化了安装步骤&#xff0c;所以直接…

简单工厂模式和策略模式的异同

文章目录 简单工厂模式和策略模式的异同相同点&#xff1a;不同点&#xff1a;目的&#xff1a;结构&#xff1a; C 代码示例简单工厂模式示例&#xff08;以创建图形对象为例&#xff09;策略模式示例&#xff08;以计算价格折扣策略为例&#xff09;UML区别 简单工厂模式和策…

脑肿瘤检测数据集,对9900张原始图片进行YOLO,COCO,VOC格式的标注

脑肿瘤检测数据集&#xff0c;对9900张原始图片进行YOLO&#xff0c;COCO&#xff0c;VOC格式的标注 数据集分割 训练组 70&#xff05; 6930图片 有效集 20&#xff05; 1980图片 测试集 10&#xff05; 990图片 预处理 静态裁剪&#xff1a; 24-82&…

YOLOv8 | 训练自定义数据集

目录 1 处理数据集1.1 数据集格式介绍1.2 划分数据集1.3 在 YOLOv8 中配置数据集 2 训练 YOLOv8 模型2.1 模型训练代码2.2 开启 TensorBoard 若尚未部署 YOLOv8&#xff0c;则可参考这篇博客&#xff1a; YOLOv8 | Windows 系统下从零开始搭建 YOLOv8 项目环境 1 处理…