Python Falcon CORS错误与AJAX

Python Falcon CORS错误与AJAX,python,ajax,cors,axios,falconframework,Python,Ajax,Cors,Axios,Falconframework,我已经阅读了多个关于这个错误的SO问题,但似乎没有一个能帮助我解决这个问题。Falcon服务器甚至没有打印出on_post方法的print语句(on_get出于某种原因工作正常),不确定我的on_post方法有什么问题 我正在从我的localhost:8000调用post方法,如下所示: #client side var ax = axios.create({ baseURL: 'http://localhost:5000/api/', timeout: 2000, h

我已经阅读了多个关于这个错误的SO问题,但似乎没有一个能帮助我解决这个问题。Falcon服务器甚至没有打印出
on_post
方法的
print
语句(
on_get
出于某种原因工作正常),不确定我的
on_post
方法有什么问题


我正在从我的
localhost:8000
调用post方法,如下所示:

#client side
var ax = axios.create({
    baseURL: 'http://localhost:5000/api/',
    timeout: 2000,
    headers: {}
});

ax.post('/contacts', {
    firstName: 'Kelly',
    lastName: 'Rowland',
    zipCode: '88293'
}).then(function(data) {
    console.log(data.data);
}).catch(function(err){
    console.log('This is the catch statement');
});

这是Falcon服务器代码

import falcon
from peewee import *


#declare resources and instantiate it
class ContactsResource(object):
    def on_get(self, req, res):
        res.status = falcon.HTTP_200
        res.body = ('This is me, Falcon, serving a resource HEY ALL!')
        res.set_header('Access-Control-Allow-Origin', '*')
    def on_post(self, req, res):
        res.set_header('Access-Control-Allow-Origin', '*')
        print('hey everyone')
        print(req.context)
        res.status = falcon.HTTP_201
        res.body = ('posted up')

contacts_resource = ContactsResource()

app = falcon.API()

app.add_route('/api/contacts', contacts_resource)
我想象我在我的
on_post
方法中犯了一个小错误,但我不知道它是什么。我假设至少
print
语句可以工作,但事实并非如此


您需要为浏览器发送的消息添加处理程序,对吗

服务器必须使用200或204且无响应正文响应
选项
,包括
访问控制允许方法
访问控制允许标头
响应标头

比如说:

def on_选项(self、req、res):
res.status=falcon.HTTP_200
res.set_头('Access-Control-Allow-Origin','*'))
res.set_标题('Access-Control-Allow-Methods','POST')
res.set_头('Access-Control-Allow-Headers','Content-Type')
Access Control Allow Headers
值调整为实际需要的值

或者您可以使用
falcon cors
软件包:

pip install falcon-cors
…然后将现有代码更改为:

from falcon_cors import CORS

cors_allow_all = CORS(allow_all_origins=True,
                      allow_all_headers=True,
                      allow_all_methods=True)

api = falcon.API(middleware=[cors.middleware])

#declare resources and instantiate it
class ContactsResource(object):

    cors = cors_allow_all

    def on_get(self, req, res):
        res.status = falcon.HTTP_200
        res.body = ('This is me, Falcon, serving a resource HEY ALL!')
    def on_post(self, req, res):
        print('hey everyone')
        print(req.context)
        res.status = falcon.HTTP_201
        res.body = ('posted up')

contacts_resource = ContactsResource()

app = falcon.API()

app.add_route('/api/contacts', contacts_resource)

您可能还需要设置
allow\u credentials\u all\u origins=True
选项。

请求是否从
OPTIONS
方法(
on\u OPTIONS
)直接进入
on\u post
方法,以便它实际上进入我的逻辑?在浏览器发送
OPTIONS
请求后,如果它通过必要的
Access Control Allow-*
response头获得了预期的响应,那么浏览器将继续从您的客户端代码发送
POST
请求,当您的服务器获得该请求时,它将使它调用您的
on_POST
方法