对于以下ajaxpost请求Flask(如何在Flask中使用从ajax发布的数据?)
$.ajax({
url:“http://127.0.0.1:5000/foo",
类型:“POST”,
contentType:“应用程序/json”,
数据:JSON.stringify({'inputVar':1}),
成功:函数(数据){
警报(“成功”+数据);
}
});
我收到一个跨源资源共享(CORS)错误:
请求的资源上不存在“Access Control Allow Origin”标头。
因此,不允许访问源“null”。
响应的HTTP状态代码为500。
我试着用以下两种方法解决这个问题,但似乎都不管用
- 使用烧瓶CORS
这是一个Flask扩展,用于处理CORS,它应该使跨源AJAX成为可能
- http://flask-cors.readthedocs.org/en/latest/
- 如何在flask和heroku中启用CORS
- 应用jwt auth wrapper时,Flask cors wrapper不工作
- Javascript-No';访问控制允许原点和#39;请求的资源上存在标头
MypythonServer.py使用此解决方案:
来自烧瓶导入烧瓶的
从flask.ext.cors导入cors,交叉起源
app=烧瓶(名称)
cors=cors(app,resources={r”/foo:{“origins”:“*”})
app.config['CORS_HEADERS']='Content Type'
@app.route('/foo',methods=['POST','OPTIONS'])
@交叉源(源='*',头=['Content-Type','Authorization'])
def foo():
return request.json['inputVar']
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
app.run()
- 使用特定的烧瓶装饰器
这是一个官方的Flask代码片段,定义了一个decorator,该decorator应该允许对它所修饰的函数执行CORS
- http://flask.pocoo.org/snippets/56/
- Python Flask跨站点HTTP POST-39;不适用于特定的允许来源
- http://chopapp.com/#351l7gc3
MypythonServer.py使用此解决方案:
从烧瓶导入烧瓶,做出响应,请求,当前应用
从日期时间导入时间增量
从functools导入更新包装器
app=烧瓶(名称)
def跨域(原点=无,方法=无,标头=无,
最大年龄=21600,附加到所有=真,
自动(选项=True):
如果“方法”不是“无”:
方法=','.join(已排序(x.upper()表示方法中的x))
如果标头不是None,也不是isinstance(标头、基串):
headers=','.join(x.upper()表示头中的x)
如果不是isinstance(原点、基串):
原点=','。连接(原点)
如果存在(最大年龄,时间差):
max_age=max_age.total_seconds()
def get_方法():
如果“方法”不是“无”:
返回方法
options\u resp=当前的应用程序。将\u设为默认\u options\u response()
返回选项和标题['allow']
def装饰器(f):
def wrapped_函数(*args,**kwargs):
如果自动_选项和request.method==“选项”:
resp=当前应用程序。设置默认选项\u响应()
其他:
resp=作出响应(f(*args,**kwargs))
如果没有,请将_附加到_all和request.method!='选项':
返回响应
h=相应的标题
h['Access-Control-Allow-Origin']=Origin
h['Access-Control-Allow-Methods']=get_Methods()
h['Access-Control-Max-Age']=str(Max_-Age)
如果标题不是“无”:
h['Access-Control-Allow-Headers']=头
返回响应
f、 提供自动选项=错误
返回更新包装(包装的包装函数,f)
返回装饰器
@app.route('/foo',methods=['GET','POST','OPTIONS'])
@跨域(origin=“*”)
def foo():
return request.json['inputVar']
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
app.run()
你能说明一下原因吗?
您可以通过以下简单操作获得结果:
@app.route('your route',methods=['GET']))
定义方法(参数):
response=flask.jsonify({'some':'data'})
add('Access-Control-Allow-Origin','*'))
返回响应