使用添加请求头的方法实现
在每次响应的时候, 添加响应头, 配置实现
from flask import Flask, views, jsonify, make_response
from flask_wtf.csrf import generate_csrf
app = Flask(__name__)
# 基础跨域使用请求头实现
class TestView(views.MethodView):
def get(self):
data = jsonify({
"code": 200,
"total": 11
})
res = make_response(data)
token = generate_csrf()
res.headers['Access-Control-Allow-Origin'] = 'http://127.0.0.1:5173'
res.headers['Access-Control-Expose-Headers'] = '_token'
res.headers['Access-Control-Allow-Credentials'] = 'true'
res.headers['_token'] = token
return res
def post(self):
data = {
"code": 201,
"data": "哈哈哈post"
}
res = make_response(data)
res.headers['Access-Control-Allow-Origin'] = 'http://127.0.0.1:5173'
res.headers['Access-Control-Allow-Credentials'] = 'true'
return res
def options(self):
res = make_response()
# 响应头,就告诉了浏览器。如果请求我的资源的页面是我这个响应头里记录了的"源",则不要拦截此响应,允许数据通行
res.headers['Access-Control-Allow-Origin'] = 'http://127.0.0.1:5173'
# 表示此次请求中可以使用那些header字段
res.headers['Access-Control-Allow-Headers'] = 'X-CSRFToken, Content-Type'
# 表示此次请求中可以使用那些请求方法
res.headers['Access-Control-Allow-Methods'] = 'GET, POST, OPTIONS'
# 响应头表示是否可以将对请求的响应暴露给页面。返回true则可以,其他值均不可以。
res.headers['Access-Control-Allow-Credentials'] = 'true'
return res
app.add_url_rule('/test', view_func=TestView.as_view('TestView'))
if __name__ == '__main__':
app.run()