一文带你学会Python Flask框架设置响应头
作者:梦想橡皮擦 发布时间:2023-04-16 03:11:37
导读
本篇博客我们将全面了解 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 设置响应头
response.headers 属性
response.headers 是 Flask 框架中的一个属性,它是一个字典类型,用于存储响应头信息。这个属性可以在视图函数中直接使用,用于设置响应头的信息。
比如在视图函数中,可以使用下面的代码来设置 Content-Type 响应头:
response.headers['Content-Type'] = 'text/plain'
如果你想要设置其它响应头,可以使用同样的方式,例如:
response.headers['X-My-Header'] = 'Xiang_Pi_Ca'
通过开发者工具,可以查看到自定义的响应头内容。
注意,在设置响应头之前,你需要创建一个响应对象。可以使用 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()
代码运行效果:
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-Type 和 X-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-Type 和 X-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-Type 和 X-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 等,这些内容以后用单独的博客进行说明。
来源:https://blog.csdn.net/hihell/article/details/128762650


猜你喜欢
- 为了降低用户注册难度,国际站的主注册表单一直在改进。主注册三月至今发生了两次较大的变化,现在对表单调整的地方分解如下:1. 两步
- 一、常见的匹配规则二、常见的匹配方法1、match()match()方法从字符串的起始位置开始匹配,该方法有两个参数,第一个是正则表达式,第
- 问题今天用nohup后台执行python程序,并将标准输出和错误输出重定向到一个log文件,但发现log文件隔好久才会更新,很煎熬。。。然而
- 前言复习试题时,发现一道复数问题问题关于 Python 的复数类型,以下选项中描述错误的是A复数的虚数部分通过后缀“J”或者“j”来表示B对
- 保留COOKIES一个小时Response.Cookies("MyCookie").Expires= (now
- 本文实例讲述了django框架实现模板中获取request 的各种信息。分享给大家供大家参考,具体如下:在做网页程序时,request,re
- 目录什么是信号Python的信号处理Python对信号的处理信号枚举信号函数signal.alarm(time)signal.pause()
- 前言前些日子了解到mqtt这样一个协议,可以在web上达到即时通讯的效果,但网上并不能很方便地找到一篇目前版本的在node下正确实现这个协议
- 前言密码重置功能相信对大家来说都不陌生,本文主要给大家介绍了关于使用Django内置的认证视图实现简单的通过邮箱重置密码的功能,分享出来供大
- 本文实例讲述了php封装的单文件(图片)上传类。分享给大家供大家参考,具体如下:<?php//封装php中的单文件(图片)上传类/*/
- 网上搜一下对应的版本号,版本号相对应。安装django有两种方式:1.pip安装pip install django这个方法我用的时候已经报
- 1 基本信息- 模块主页:[github]- 类型:#第三方库2 安装方法pip install pythonping3 一般使用from
- <html> <head> <title>Login</title> <meta ht
- 在mysql中limit可以实现快速分页,但是如果数据到了几百万时我们的limit必须优化才能有效的合理的实现分页了,否则可能卡死你的服务器
- 背景实现需求:批量下载联想某型号的全部驱动程序。一般在做网络爬虫的时候,都是保存网页信息为主,或者下载单个文件。当涉及到多文件批量下载的时候
- 如何修改被表单引用的ASP页面?formhandler.asp<HTML><BODY BGCOLOR="
- 问题(来自Udacity机器学习工程师纳米学位预览课程)用 Python 实现函数 count_words(),该函数输入字符串 s 和数字
- 本文介绍了python十进制和二进制的转换方法(含浮点数),分享给大家,也给自己留个笔记,具体如下:我终于写完了 , 十进制转二进制的小数部
- part 1最近在学习go自带的rpc,看完了一遍想着自己实现一个codec,也就是自定义消息的序列化和反序列化。消息的序列化和反序列化涉及
- 基于python+OpenCV的车牌号码识别,供大家参考,具体内容如下车牌识别行业已具备一定的市场规模,在电子警察、公路卡口、停车场、商业管