解决Flask和Python中POST请求的问题
P粉476475551
P粉476475551 2023-09-02 14:08:47
[JavaScript讨论组]

我正在编写一个Flask的POST请求处理程序来添加一个CLIENT。

app = Flask(__name__)
CORS(app)


@app.post("/api/clients/")
def addClient():
    data = open('./src/clients.json', 'w+')
    clients = json.load(data)
    req = json.loads(request.data)
    clients.append(req)
    json.dump(clients, data)
    data.close()
    return req

但是当我在浏览器中执行这个Javascript的fetch() API时:

let u = "http://url/api/clients/n1/"
let b = {
  "client": "n1",
  "details": {
    "address1": "Line1",
    "address2": "line2",
    "city": "city",
    "email": "@",
    "gst": "gstno"
  }
}

const addStudent = async (us, c) => {
const response = await fetch(us, {
    method: "POST",
    headers: {
    "Content-Type": "application/json",
    },
    body: c,
});

const data = await response.json();

console.log(data);
};

addStudent(u, b);

浏览器控制台显示以下错误:

访问'url/api/clients/'的fetch被阻止了,因为源'null'没有'Access-Control-Allow-Origin'头。如果一个不透明的响应满足您的需求,请将请求的模式设置为'no-cors'以禁用CORS获取资源。

供参考,这些是Flask命令行中提到的错误:

127.0.0.1 - - [2023 年 3 月 26 日 18:09:05] “POST /api/clients/ HTTP/1.1” 500 - 回溯(最近一次调用最后一次): 文件“E:\All_Codes\WEB_DEV\excel-o-meter\venv\lib\site-packages\flask\app.py”,第 2551 行,调用 返回 self.wsgi_app(环境,start_response) 文件“E:\All_Codes\WEB_DEV\excel-o-meter\venv\lib\site-packages\flask\app.py”,第 2531 行,在 wsgi_app 中 响应 = self.handle_exception(e) 文件“E:\All_Codes\WEB_DEV\excel-o-meter\venv\lib\site-packages\flask_cors\extension.py”,第 165 行,位于wrapped_function 中 返回 cors_after_request(app.make_response(f(*args, **kwargs))) 文件“E:\All_Codes\WEB_DEV\excel-o-meter\venv\lib\site-packages\flask\app.py”,第 2528 行,在 wsgi_app 中 响应 = self.full_dispatch_request() 文件“E:\All_Codes\WEB_DEV\excel-o-meter\venv\lib\site-packages\flask\app.py”,第 1825 行,在 full_dispatch_request 中 rv = self.handle_user_exception(e) 文件“E:\All_Codes\WEB_DEV\excel-o-meter\venv\lib\site-packages\flask_cors\extension.py”,第 165 行,位于wrapped_function 中 返回 cors_after_request(app.make_response(f(*args, **kwargs)))

我是否需要添加特定的头部,如上述所述,或者我在Flask端存在一些错误? 命令行中的最后一行似乎给出了CORS错误。

P粉476475551
P粉476475551

全部回复(1)
P粉459578805

你能否尝试一下并检查一下?

方法1

安装flask-cors

pip install -U flask-cors

然后在应用程序初始化之后,使用默认参数初始化flask-cors:

from flask import Flask
 from flask_cors import CORS 

 app = Flask(__name__)
 CORS(app)

 @app.route("/")
 def helloWorld():
  return "Hello, cross-origin-world!"

更新

方法2

如果你不想使用任何额外的包,你也可以这样做

@app.route('your own route', methods=['GET'])
 def yourMethod(params):
   response = flask.jsonify({'somekey': 'somevalue'})
   # 注意:理想情况下,'*' 应该被替换为你的主机来源
   response.headers.add('Access-Control-Allow-Origin', '*') 
   return response

我建议请尝试使用以下代码来定义你的端点

@app.route("/api/clients/", methods=['POST'])

而不是

@app.post("/api/clients/")

参考链接 - Flask http methods

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号