Python/Flask 休息 API 未通过预检 w/CORS
Python/Flask Rest API not passing preflight w/CORS
我正在尝试在 python 中获得最简单的休息 api,但我遇到了麻烦。我不确定我做错了什么,但我认为这与 CORS 有关。这令人沮丧,因为我使用了 flask_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
它不会破坏应用程序,但也不会修复错误。
将 OPTIONS 添加到路由装饰器的方法关键字中,或者完全删除该关键字。
几个月后重温。
python/flask 中的一个令人讨厌的陷阱似乎是编译后的代码将被缓存,因此如果您在应用程序的入口点(即 main.py)更改某些内容,并且不要每次 运行 flask export 并重新编译时,请删除 flask export 创建的二进制文件,它可能使用旧代码!
确保删除(在 atom 中它们是紫色的 1/0 文件 - 如果您启用了文件图标 - 标记为 .pyc)如果您得到令人毛骨悚然的输出。
我正在尝试在 python 中获得最简单的休息 api,但我遇到了麻烦。我不确定我做错了什么,但我认为这与 CORS 有关。这令人沮丧,因为我使用了 flask_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
它不会破坏应用程序,但也不会修复错误。
将 OPTIONS 添加到路由装饰器的方法关键字中,或者完全删除该关键字。
几个月后重温。
python/flask 中的一个令人讨厌的陷阱似乎是编译后的代码将被缓存,因此如果您在应用程序的入口点(即 main.py)更改某些内容,并且不要每次 运行 flask export 并重新编译时,请删除 flask export 创建的二进制文件,它可能使用旧代码!
确保删除(在 atom 中它们是紫色的 1/0 文件 - 如果您启用了文件图标 - 标记为 .pyc)如果您得到令人毛骨悚然的输出。