2017-07-09 34 views
2

我试图让最简单的休息API,我可以在Python中,我有麻烦。我不确定我做错了什么,但我认为它与CORS有关。这是令人沮丧的,因为我已经使用了flask_cors软件包来解决这个问题,而且它看起来不起作用。Python/Flask Rest API未通过预检w/CORS

在我的main.py文件,我有以下

from flask import Flask 
from flask_cors import CORS, cross_origin 

app = Flask(__name__) 
CORS(app) 

import routes.login 

if __name__ == '__main__': 
    app.run(debug=True) 

对于我的项目,我有这个作为我的文件夹结构:

main.py 
__init__.py 
routes 
    __init__.py 
    login.py 

和我有下面的代码login.py

from flask import Flask 
from flask_cors import CORS, cross_origin 

from main import app 
CORS(app) 

@app.route('/login', methods=['POST', 'GET']) 
@cross_origin() 
def login(name, password): 
    if request.method == 'POST': 
     print('inside login POST') 
    if request.method == 'GET': 
     print('inside login GET') 

我目前收到此错误:

xhr.js:178 OPTIONS http://localhost:5000/login 404 (NOT FOUND) 
dispatchXhrRequest @ xhr.js:178 
xhrAdapter @ xhr.js:12 
dispatchRequest @ dispatchRequest.js:52 
:3000/pictureswapper:1 XMLHttpRequest cannot load http://localhost:5000/login. 
Response for preflight has invalid HTTP status code 404 

存在某种CORS错误,但我真的不知道发生了什么问题。有任何想法吗?

编辑:在这里有(https://flask-cors.readthedocs.io/en/v1.3.1/index.html?highlight=preflight)文件中有关于预检的任何内容的唯一地方。如果我添加

@cross_origin(headers=['Content-Type']) # Send Access-Control-Allow-Headers 

它不会中断应用程序,但它也不会修复错误。

+0

我也试过使用这里使用的方法:http://flask.pocoo.org/snippets/56/,并在此stackoverflow答案引用:https://stackoverflow.com/questions/22181384/javascript -no-access-control-allow-origin-header-is-present-on-the-request,并且它似乎也不起作用。同样的错误。 –

+0

您是否先在浏览器地址栏中尝试过URL,以确保它实际上正常工作? –

回答

1

几个月后重新访问。

python/flask中的一个令人讨厌的问题似乎是编译后的代码会被缓存,所以如果你在应用程序的入口点(例如main.py)改变了某些东西,并且不要删除这些二进制文件烧瓶出口创建然后每次你运行烧瓶出口和重新编译它可能使用旧的代码!

确保删除(在原子中他们是紫色的1/0文件 - 如果你有文件图标启用标记.pyc)这些文件,如果你正在得到鬼的输出。

0

将OPTIONS添加到路由装饰器的methods关键字中,或者完全删除该关键字。

+1

Flask自动添加'OPTIONS'。 – davidism

+0

是的,我试过了,它给出了同样的错误。 –