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

python Flask methods

在 Flask 中,@app.route() 装饰器用于定义 URL 路由和与之关联的视图函数。当你想指定某个 URL 可以接受哪些 HTTP 方法时,你可以使用 methods 参数。methods 是一个列表,它可以包含任何有效的 HTTP 方法。

Falsk文章中的描述:
链接:https://flask.palletsprojects.com/en/3.0.x/patterns/methodoverrides/

class HTTPMethodOverrideMiddleware(object):allowed_methods = frozenset(['GET','HEAD','POST','DELETE','PUT','PATCH','OPTIONS'])bodyless_methods = frozenset(['GET', 'HEAD', 'OPTIONS', 'DELETE'])def __init__(self, app):self.app = appdef __call__(self, environ, start_response):method = environ.get('HTTP_X_HTTP_METHOD_OVERRIDE', '').upper()if method in self.allowed_methods:environ['REQUEST_METHOD'] = methodif method in self.bodyless_methods:environ['CONTENT_LENGTH'] = '0'return self.app(environ, start_response)

常见的 HTTP 方法包括:

  1. GET:请求一个指定资源的表示形式。通常用于从服务器获取数据。
  2. POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。
  3. PUT:请求服务器存储一个资源,并用请求的主体部分来更新该资源的内容。
  4. DELETE:请求服务器删除指定的页面。
  5. HEAD:类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头信息。
  6. OPTIONS:允许客户端查看服务器的性能。
  7. PATCH:对资源进行部分修改。
  8. CONNECT:HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。
  9. TRACE:回显服务器收到的请求,主要用于测试或诊断。

在 Flask 中,你可以这样指定 methods

from flask import Flaskapp = Flask(__name__)@app.route('/example', methods=['GET', 'POST'])
def example():if request.method == 'GET':return "You're making a GET request"elif request.method == 'POST':return "You're making a POST request"if __name__ == '__main__':app.run()

在这个例子中,/example URL 既可以接受 GET 请求,也可以接受 POST 请求。视图函数 example() 会根据请求的方法返回不同的响应。

GET 请求

GET 请求通常用于从服务器检索数据。

from flask import Flask, requestapp = Flask(__name__)@app.route('/get_example', methods=['GET'])
def get_example():return "You've made a GET request to this URL."if __name__ == '__main__':app.run(debug=True)

POST 请求

POST 请求通常用于向服务器提交数据,如表单数据。

from flask import Flask, requestapp = Flask(__name__)@app.route('/post_example', methods=['POST'])
def post_example():data = request.form  # 假设数据是表单数据name = data.get('name')return f"You've posted {name}!"if __name__ == '__main__':app.run(debug=True)

PUT 请求

PUT 请求通常用于更新服务器上的资源。

from flask import Flask, request, jsonifyapp = Flask(__name__)# 假设我们有一个存储用户数据的字典
users = {}@app.route('/put_example/<int:user_id>', methods=['PUT'])
def put_example(user_id):data = request.get_json()  # 假设数据是 JSON 格式users[user_id] = datareturn jsonify({"message": f"User {user_id} has been updated."}), 200if __name__ == '__main__':app.run(debug=True)

DELETE 请求

DELETE 请求通常用于删除服务器上的资源。

from flask import Flask, request, jsonifyapp = Flask(__name__)# 假设我们有一个存储用户数据的字典
users = {1: {'name': 'John', 'age': 30}}@app.route('/delete_example/<int:user_id>', methods=['DELETE'])
def delete_example(user_id):if user_id in users:del users[user_id]return jsonify({"message": f"User {user_id} has been deleted."}), 200else:return jsonify({"error": f"User {user_id} does not exist."}), 404if __name__ == '__main__':app.run(debug=True)

HEAD 请求

HEAD 请求与 GET 请求类似,但服务器只返回响应头,而不返回响应体。

from flask import Flaskapp = Flask(__name__)@app.route('/head_example', methods=['HEAD'])
def head_example():# Flask 默认会处理 HEAD 请求,类似于 GET 请求但只返回头return "", 200if __name__ == '__main__':app.run(debug=True)

注意:Flask 默认会自动处理 HEAD 请求,如果相应的 GET 路由存在,则 HEAD 请求会返回相同的响应头但没有响应体。

PATCH 请求

PATCH 请求用于对资源进行部分更新。

from flask import Flask, request, jsonifyapp = Flask(__name__)# 假设我们有一个存储用户数据的字典
users = {1: {'name': 'John', 'age': 30}}@app.route('/patch_example/<int:user_id>', methods=['PATCH'])
def patch_example(user_id):if user_id in users:data = request.get_json()  # 假设数据是 JSON 格式users[user_id].update(data)  # 部分更新用户数据return jsonify({"message": f"User {user_id} has been partially updated."}), 200else:return jsonify({"error": f"User {user_id} does not exist."}), 404if __name__ == '__main__':app.run(debug=True)

CONNECT 方法

CONNECT 方法通常用于建立到由目标资源标识的服务器的隧道连接。这主要用于通过代理服务器发送加密的 HTTPS 请求。因为 HTTPS 的通信内容在传输前是加密的,所以代理服务器无法直接读取或修改请求/响应的内容。通过使用 CONNECT 方法,客户端可以告诉代理服务器它想要建立一个到目标服务器的隧道,然后代理服务器会将客户端的请求直接转发到目标服务器,而不对其进行任何修改。

在 Flask 中,通常不直接处理 CONNECT 请求,因为这涉及到网络层面的底层操作。但是,如果你正在编写一个代理服务器,并且希望用 Flask 来处理非 CONNECT 类型的请求,你可以忽略 CONNECT 请求,或者将其转发到另一个处理 CONNECT 请求的组件。

TRACE 方法

TRACE 方法允许客户端发起一个请求到服务器,服务器会将收到的请求(包括请求头和请求体)原样返回给客户端。这主要用于测试或诊断,以查看请求在传输过程中是否被修改或添加了额外的头信息。

在 Flask 中,你可以通过编写一个处理 TRACE 请求的视图函数来演示这个功能:

from flask import Flask, request, jsonifyapp = Flask(__name__)@app.route('/trace_example', methods=['TRACE'])
def trace_example():# 将请求头和请求体(如果有的话)返回给客户端headers = {key: value for key, value in request.headers.items()}# 注意:出于安全考虑,通常不会返回请求体,因为它可能包含敏感信息# 这里我们假设没有请求体,或者我们不返回它return jsonify({"headers": headers, "message": "TRACE request received."}), 200if __name__ == '__main__':app.run(debug=True)

请注意,由于安全和隐私的原因,许多服务器和代理可能会限制或禁止 TRACE 请求。此外,由于 Flask 默认不处理请求体(对于 TRACE 请求来说通常也没有请求体),上面的示例中没有处理请求体。在真实的 TRACE 实现中,服务器可能会返回请求行和请求头,但通常不会返回请求体。

相关文章:

  • 【linux】网络基础(2)——udp协议
  • RabbitMQ 之 延迟队列
  • 【开发环境】MacBook M2安装git并拉取gitlab项目,解决gitlab出现Access Token使用无效的方法
  • ElementUI搭建
  • 百日筑基第八天-看看mybatis
  • ARP 原理详解 二
  • Linux——查找文件-find(详细)
  • elementplus el-table(行列互换)转置
  • 010、GPT-5:AI新纪元的曙光与挑战
  • HarmonyOS Next 原生应用开发-从TS到ArkTS的适配规则(一)
  • macOS Sequoia 15 beta 2 (24A5279h) Boot ISO 原版可引导镜像下载 (iPhone Mirroring 现已支持)
  • React Native优质开源项目推荐与解析
  • grpc学习golang版( 三、proto文件数据类型 )
  • 非常疑惑文章变成了仅VIP可读
  • 【高考志愿】建筑学
  • .pyc 想到的一些问题
  • 0x05 Python数据分析,Anaconda八斩刀
  • Brief introduction of how to 'Call, Apply and Bind'
  • CentOS从零开始部署Nodejs项目
  • docker python 配置
  • Fastjson的基本使用方法大全
  • HTTP中GET与POST的区别 99%的错误认识
  • java第三方包学习之lombok
  • Linux链接文件
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • 电商搜索引擎的架构设计和性能优化
  • 那些年我们用过的显示性能指标
  • 区块链共识机制优缺点对比都是什么
  • 让你的分享飞起来——极光推出社会化分享组件
  • 如何利用MongoDB打造TOP榜小程序
  • 微信小程序:实现悬浮返回和分享按钮
  • 做一名精致的JavaScripter 01:JavaScript简介
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • # SpringBoot 如何让指定的Bean先加载
  • #Linux(Source Insight安装及工程建立)
  • #QT(TCP网络编程-服务端)
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (C语言)共用体union的用法举例
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (层次遍历)104. 二叉树的最大深度
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (四)Controller接口控制器详解(三)
  • (四)汇编语言——简单程序
  • (转) Face-Resources
  • ***检测工具之RKHunter AIDE
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .describe() python_Python-Win32com-Excel
  • .dwp和.webpart的区别
  • .NET Framework杂记
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...
  • .Net程序猿乐Android发展---(10)框架布局FrameLayout