[ Flask配置跨域 ]


使用添加请求头的方法实现

在每次响应的时候, 添加响应头, 配置实现

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()