flask跨域问题
在Flask开发RESTful后端时,前端请求会遇到跨域的问题。下面是解决方法:
使用 flask-cors库可以很容易的解决
1
|
pip install flask - cors |
两种方法,一个是全局/批量的,一个是单一独立的:
安全起见,一般来说使用独立的方式会常用一些。
1.独立方式
通过给路由添加@cross_origin标识即可
1
2
3
4
5
6
7
8
9
|
from flask import Flask, jsonify from flask_cors import cross_origin @app .route( '/upload' , methods = [ 'POST' , 'OPTIONS' ]) @cross_origin () def upload(): # todo result_text = { "result" : "True" } return jsonify(result_text) |
2.全局方式
也很简单:
1
2
3
4
5
6
|
from flask import Flask from flask_cors import CORS if __name__ = = '__main__' : app.run(host = '0.0.0.0' , threaded = True , debug = True ) CORS(app) |
这样所有的路由都会支持跨域了。
3.批量方式
还有根据路由正则来批量控制等方式,更加灵活,可以查阅官方文档。
对请求的Response header中加入header
1
2
3
4
5
6
7
8
9
10
11
12
|
@app .after_request def af_request(resp): """ #请求钩子,在所有的请求发生后执行,加入headers。 :param resp: :return: """ resp = make_response(resp) resp.headers[ 'Access-Control-Allow-Origin' ] = '*' resp.headers[ 'Access-Control-Allow-Methods' ] = 'GET,POST' resp.headers[ 'Access-Control-Allow-Headers' ] = 'x-requested-with,content-type' return resp |