Flask是一款十分轻量级的web服务框架,能够很方便快捷地将本地的python数据程序构建称为一个web服务,进而方便地被调用,在前后端分离的开发过程中,不可避免地会出现前端访问后台服务时出现跨域报错的问题,为了能够正常的进行web服务的访问,解决跨域问题成为了很关键的一环。
说起跨域请求,大家首先想到的就会是设置请求头Access-Control-Allow-Origin: *。这样做的目的就是告诉浏览器接收一切URL访问,flask提供了两种比较常用的跨域报错解决方案,一种就是上面说的一堆头部或者是其他的信息的设置;另一种就是需要借助于第三方的模块flask_cors来完成,下面分别进行说明:
第一种实现方式如下:
def resultTransform(result): ''' 结果数据跨域解决 ''' rst = make_response(result) rst.headers['Accept'] = '*/*' rst.headers['Access-Control-Allow-Origin'] = '*' rst.headers['Access-Control-Allow-Methods'] = 'PUT,GET,POST,DELETE' rst.headers['Access-Control-Allow-Headers'] = "Referer,Accept,Origin,User-Agent" return rst
其中,result是一个接送数据对象,这样转化之后就可以解决跨域的问题了。实际使用中,可能还是会遇上跨域报错的问题,那么这里就需要对头信息进行细化处理了,具体如下:
def resultTransform(result): ''' 结果数据跨域解决 ''' rst = make_response(result) rst.headers['Accept'] = '*/*' rst.headers['Access-Control-Allow-Origin'] = '*' rst.headers['Access-Control-Expose-Headers'] = 'Authorization' rst.headers['Access-Control-Allow-Methods'] = 'PUT,GET,POST,DELETE,OPTIONS' rst.headers['Access-Control-Allow-Headers'] = "Referer,Accept,Authorization, Content-Type, Depth, User-Agent, X-File-Size, X-Requested-With, X-Requested-By, If-Modified-Since, X-File-Name, X-File-Type, Cache-Control, Origin" return rst
这样就成功解决了。
下面介绍一下第二种的跨域报错解决方式,具体实现如下:
from flask_cors import *from functools import wraps app = Flask(__name__)CORS(app, supports_credentials=True)CORS(app, resources=r'/*') #r'/*' 是通配符,让本服务器所有的URL 都允许跨域请求
第二种方式的前提是你要先安装:flask_cors,之后才能带入该模块。
上面的两种方式都可以实现跨域数据资源的请求访问,记录一下!