Python Flask 框架设置响应头,一篇文章学明白

news2024/10/7 20:34:09

flask 响应头设置

    • 📖 导读
    • 📖 Python Flask 设置响应头
      • 🎉 response.headers 属性
      • 🎉 flask.abort() 函数返回特定状态码
    • 📖 Flask 中可设置的响应头参数
    • 📖 其他关于响应头的配置
      • 🎁 使用中间件
      • 🎁 使用装饰器
      • 🎁 使用配置
      • 🎁 使用第三方扩展

📖 导读

本篇博客我们将全面了解 Flask 中关于请求的相关设置,开始前你需要先配置 Flask 的基础框架。

from flask import Flask, make_response

app = Flask(__name__)


@app.route('/')
def index():
    response = make_response("Hello, 梦想橡皮擦")
    response.headers['Content-Type'] = 'text/html; charset=utf-8'
    return response


if __name__ == '__main__':
    app.run()

运行代码,得到下述效果。

Python Flask 框架设置响应头,一篇文章学明白

📖 Python Flask 设置响应头

🎉 response.headers 属性

response.headers 是 Flask 框架中的一个属性,它是一个字典类型,用于存储响应头信息。这个属性可以在视图函数中直接使用,用于设置响应头的信息。

比如在视图函数中,可以使用下面的代码来设置 Content-Type 响应头:

response.headers['Content-Type'] = 'text/plain'

如果你想要设置其它响应头,可以使用同样的方式,例如:

response.headers['X-My-Header'] = 'Xiang_Pi_Ca'

通过开发者工具,可以查看到自定义的响应头内容。

Python Flask 框架设置响应头,一篇文章学明白

注意,在设置响应头之前,你需要创建一个响应对象。可以使用 flask.make_response() 函数来创建一个响应对象,例如:

from flask import make_response

response = make_response("Hello, Xiang_Pi_Ca!")
response.headers['Content-Type'] = 'text/plain'

🎉 flask.abort() 函数返回特定状态码

使用 flask.abort() 函数来返回特定状态码的响应,并设置响应头。例如,在请求中包含无效参数时返回 400 Bad Request:

from flask import Flask, abort

app = Flask(__name__)


@app.route('/')
def index():
    # 模拟参数错误
    invalid_parameter = True
    if invalid_parameter:
        abort(400)
    return "Hello, Xiang_Pi_Ca!"

if __name__ == '__main__':
    app.run()

代码运行效果:

Python Flask 框架设置响应头,一篇文章学明白

📖 Flask 中可设置的响应头参数

在 Flask 中,你可以设置任何 HTTP 协议定义的响应头参数。

  • 常用的响应头包括:
    • Content-Type:用于指定响应体的 MIME 类型。例如,'Content-Type': 'text/html' 表示响应体是 HTML 文档。
    • Content-Length: 用于指定响应体的长度。
    • Location:用于重定向。例如,'Location': 'https://pachong.vip' 会导致浏览器重定向到 https://pachong.vip
    • Cache-Control: 用于控制缓存,例如,'Cache-Control': 'no-cache' 表示浏览器不应缓存响应。
    • Expires: 用于指定缓存过期时间。
    • Etag:用于指定资源的 ETag 值。
    • Server: 用于指定服务器的名称和版本。
    • Access-Control-Allow-Origin: 用于控制跨域资源共享。

📖 其他关于响应头的配置

除了在视图函数中设置响应头之外,Flask 还提供了其他方式来配置响应头。

🎁 使用中间件

中间件可以在请求和响应之间添加额外的处理。你可以使用中间件来设置响应头。

中间件是一种在请求和响应之间添加额外处理的机制,可以使用中间件来设置响应头。

下面的代码实现了一个中间件,在每个请求之前设置 Content-TypeX-My-Ca 响应头。

from flask import Flask, request,make_response

app = Flask(__name__)


@app.before_request
def before_request():
    response = make_response()
    response.headers['Content-Type'] = 'application/json'
    response.headers['X-My-Ca'] = 'xiangpica_demo'
    return response


@app.route('/')
def index():
    return "Hello, 梦想橡皮擦!"

🎁 使用装饰器

装饰器是一种在不改变视图函数本身的情况下添加额外处理的方法。

下面的代码实现了一个装饰器,在每个视图函数执行之前设置 Content-TypeX-My-Ca 响应头。

from flask import Flask, request, make_response
from functools import wraps

app = Flask(__name__)


def set_headers(f):
    @wraps(f)
    def decorated_function(*args, **kwargs):
        response = make_response(f(*args, **kwargs))
        response.headers['Content-Type'] = 'application/json'
        response.headers['X-My-Header'] = 'xiangpica_demo_'
        return response

    return decorated_function


@app.route('/')
@set_headers
def index():
    return "Hello, 梦想橡皮擦!"


if __name__ == '__main__':
    app.run()

上述代码可以实现每当路由被调用时,装饰器都会在视图函数之前设置 Content-TypeX-My-Ca 响应头。

🎁 使用配置

应用程序配置是一种在不修改应用程序代码的情况下更改应用程序行为的方法。

from flask import Flask,  make_response

app = Flask(__name__)
app.config.update(
    RESPONSE_HEADERS={
        'Content-Type': 'application/json',
        'X-My-Ca': 'xiangpica_demo_'
    }
)


@app.route('/')
def index():
    response = make_response()
    for key, value in app.config['RESPONSE_HEADERS'].items():
        response.headers[key] = value
    return response


if __name__ == '__main__':
    app.run()

上述代码在配置中定义了 'Content-Type''X-My-Ca' 两个响应头,在路由函数中就可以使用 make_response() 函数来创建响应对象,然后遍历配置中的响应头来添加响应头了,该写法的优点是,我们可以在不修改应用程序代码的情况下更改响应头, 也可以根据环境来设置不同的响应头。

🎁 使用第三方扩展

Flask 有许多第三方扩展可以帮助你更简单的配置响应头, 比如 Flask-Cors,Flask-Security 等,这些内容以后用单独的博客进行说明。

📢📢📢📢📢📢
💗 你正在阅读 【梦想橡皮擦】 的博客
👍 阅读完毕,可以点点小手赞一下
🌻 发现错误,直接评论区中指正吧
📆 橡皮擦的第 843 篇原创博客

从订购之日起,案例 5 年内保证更新

  • ⭐️ Python 爬虫 120,点击订购 ⭐️
  • ⭐️ 爬虫 100 例教程,点击订购 ⭐️

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

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

相关文章

[Python]调用pytdx的代码示例

安装pytdxpip install pytdx简单示范from pytdx.hq import TdxHq_API api TdxHq_API() # 数据获取接口一般返回list结构, with api.connect(119.147.212.81, 7709): # 返回普通listdata api.get_security_bars(9, 0, 000001, 0, 10) print(data)输出结果[Ordered…

康巴丝(compas)某Wi-Fi万年历无法自动校时的问题

笔者前两年购买过一块康巴丝牌的电子万年历,该万年历的最大特点可以通过Wi-Fi联网自动校时。 后来的某一天,笔者将原来的H3C AP(11AC)升级为锐捷AP(11AX)。 在之后的几个月中,发现这块电子万年…

Linux常用命令——setsebool命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) setsebool 修改SElinux策略内各项规则的布尔值 补充说明 setsebool命令是用来修改SElinux策略内各项规则的布尔值。setsebool命令和getsebool命令是SELinux修改和查询布尔值的一套工具组。SELinux的策略与规则…

【云原生】Prometheus 监控系统的初步了解与系统搭建

内容预知 前言 1. Prometheus的相关知识 1.1 Prometheus的认识与了解 1.2 Prometheus的特点 1.3 Prometheus存储引擎TSDB 的特点优势 1.4 Prometheus 的生态组件 (1)Prometheus server (2)Client Library (3&a…

主流的操作系统(带你快速了解)

📜 “作者 久绊A” 专注记录自己所整理的Java、web、sql等,IT技术干货、学习经验、面试资料、刷题记录,以及遇到的问题和解决方案,记录自己成长的点滴。 🍁 操作系统【带你快速了解】对于电脑来说,如果说…

如何安装双系统与多系统(带你快速了解)

📜 “作者 久绊A” 专注记录自己所整理的Java、web、sql等,IT技术干货、学习经验、面试资料、刷题记录,以及遇到的问题和解决方案,记录自己成长的点滴。 🍁 操作系统【带你快速了解】对于电脑来说,如果说…

开放式基金净值历史数据 API 数据接口

开放式基金净值历史数据 API 数据接口 实时净值,历史数据,多维度指数参数。 1. 产品功能 支持所有开放式基金净值历史数据查询;可定义查询指标与时间范围;支持所有开放式基金净值历史数据查询;不同的输入指标返回不同…

java-List

java-List1. 预备知识-泛型(Generic)1.1 泛型的引入1.2 泛型的分类1.3 泛型类的定义的简单演示1.4 泛型背后作用时期和背后的简单原理1.5 泛型类的使用1.6 泛型总结2. 预备知识-包装类(Wrapper Class)2.1 基本数据类型和包装类直接的对应关系2.2 包装类的使用,装箱(…

Windows压缩工具 “ Bandizip与7-zip ”(带你快速了解)

📜 “作者 久绊A” 专注记录自己所整理的Java、web、sql等,IT技术干货、学习经验、面试资料、刷题记录,以及遇到的问题和解决方案,记录自己成长的点滴。 🍁 操作系统【带你快速了解】对于电脑来说,如果说…

机器视觉在烟草领域中的应用

一个不知名大学生,江湖人称菜狗 original author: jacky Li Email : 3435673055qq.com Time of completion:2023.1.26 Last edited: 2023.1.26 目录 机器视觉在烟草领域中的应用 烟叶外观检测 烟末原料异物检测 叶梗烟丝缺陷检测 香烟过滤嘴外型检测…

(21)go-micro微服务logstash使用

文章目录一 Logstash介绍二 Logstash作用三 Logstash工作原理四 Logstash安装1.拉取镜像2.运行命令3.查看是否运行五 Logstash使用六 最后一 Logstash介绍 Logstash是具有实时流水线能力的开源的数据收集引擎。Logstash可以动态统一不同来源的数据,并将数据标准化到…

活动星投票自控好声音网络评选微信的投票方式线上免费投票

“自控好声音”网络评选投票_投票平台的陆续发展_小程序投票的好处与坏处_如何进行有效的图文投票近些年来,第三方的微信投票制作平台如雨后春笋般络绎不绝。随着手机的互联网的发展及微信开放平台各项基于手机能力的开放,更多人选择微信投票小程序平台&…

恶意代码分析实战 17 C++代码分析

17.1 Lab20-01 问题 在0x401040处的函数采用了什么参数? 首先,以①处的一个对new操作符的调用开始,这表明它正在创建一个对象。一个对象的引用会在EAX寄存器中返回最终存储在②处的var_8变量和③处的var_4变量中。var_4变量在④处被移到了E…

pytorch深度学习基础(十)——常用线性CNN模型的结构与训练

线性CNN模型的结构与训练引入包LeNet模型结构模型构建AlexNet模型结构模型构建VGG模型结构模型构建加载数据集累加器精度训练引入包 import torch from torch import nn from torchvision import datasets from torchvision import transforms from torch.utils.data import D…

基于蜣螂算法的极限学习机(ELM)分类算法-附代码

基于蜣螂算法的极限学习机(ELM)分类算法 文章目录基于蜣螂算法的极限学习机(ELM)分类算法1.极限学习机原理概述2.ELM学习算法3.分类问题4.基于蜣螂算法优化的ELM5.测试结果6.参考文献7.Matlab代码摘要:本文利用蜣螂算法对极限学习机进行优化,并用于分类问…

【华为上机真题】连续字母长度

🎈 作者:Linux猿 🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊! &…

C语言--指针初阶

目录什么是指针?指针变量指针类型指针类型的意义在数组中举例野指针概念野指针成因如何规避野指针指针运算指针-整数指针关系运算指针-指针应用(求字符串长度)结语什么是指针? 在计算机科学中,指针(Pointer)是编程语言…

直接在Notepad++中运行GO

1.Windows上安装Go语言开发包参考链接:http://c.biancheng.net/view/3992.html1.1.下载Go语言开发包可以在Go语言官网 (https://golang.google.cn/dl/) 下载Windows 系统下的Go语言开发包,如下图所示。这里我们下载的是64 位的开发…

深度学习:轻量级神经网络MobileNet 从v1 到v2

深度学习:轻量级神经网络MoblieNet 从v1 到 v2MobileNet V1前言深度可分离卷积传统卷积Depth Wise ConvPoint Wise Conv性能对比MobileNet V2前言主要改进Inverted Residuals BlockResidual BlockExpansion LayerReLU6Linear Activation Function小结实验MobileNet …

大年初二、初三—— 牛客网刷题经验分享~

2023年大年初二、初三 —— 牛客网刷题经验分享~😎大年初初二、初三 —— 牛客网刷题经验分享~😎)前言🙌牛客网——基础语法【循环输出图形篇】🙌BC98 线段图案 🙌BC99 正方形图案 🙌BC100 直角三角形图案 …