在 Flask 中尝试 POST 方法时出现 415 错误

问题描述 投票:0回答:1

除了POST之外的所有方法都在运行。我收到错误文本:“message”:“未尝试加载 JSON 数据,因为请求内容类型不是“application/json”。”

我在互联网上搜索了一下,添加“application/json”可能是解决方案,但它不起作用。

from flask import Flask, request
from flask_restful import Api, Resource
import pandas as pd

app = Flask(__name__)
api = Api(app)

class Users(Resource):
    def get(self):
        data = pd.read_csv('users.csv')
        data = data.to_dict('records')
        return {'data' : data}, 200

    def post(self):
        json = request.get_json()
        req_data = pd.DataFrame({
            'name'      : [json['name']],
            'age'       : [json['age']],
            'city'      : [json['city']]
        })
        data = pd.read_csv('users.csv')
        data = pd.concat([data, req_data], ignore_index=True)
        data.to_csv('users.csv', index=False)
        return {'message' : 'Record successfully added.'}, 200

    def delete(self):
        name = request.args['name']
        data = pd.read_csv('users.csv')

        if name in data['name'].values:
            data = data[data['name'] != name]
            data.to_csv('users.csv', index=False)
            return {'message': 'Record successfully deleted.'}, 200
        else:
            return {'message': 'Record not found.'}, 404

class Cities(Resource):
    def get(self):
        data = pd.read_csv('users.csv',usecols=[2])
        data = data.to_dict('records')
        return {'data' : data}, 200

class Name(Resource):
    def get(self,name):
        data = pd.read_csv('users.csv')
        data = data.to_dict('records')
        for entry in data:
            if entry['name'] == name :
                return {'data' : entry}, 200
        return {'message' : 'No entry found with this name !'}, 404


# Add URL endpoints
api.add_resource(Users, '/users')
api.add_resource(Cities, '/cities')
api.add_resource(Name, '/<string:name>')


if __name__ == '__main__':
    # app.run(host="0.0.0.0", port=5000)
    app.run(debug=True)
python api flask post
1个回答
0
投票

在 Flask 应用程序中,您使用 request.get_json() 来解析请求中的 JSON 数据。但是,要使其正常工作,客户端必须在请求标头中包含“application/json”内容类型。

Content-Type: application/json

这是一个使用curl的示例:

curl -X POST -H "Content-Type: application/json" -d '{"name": "John", "age": 25, "city": "New York"}' http://your-api-endpoint/users

如果您使用 Postman,请确保标题部分中的 Content-Type 设置为“application/json”。

如果问题仍然存在,您可能需要检查发送到 API 的实际请求并验证 Content-Type 标头设置是否正确。此外,您可以在 Flask 应用程序中打印请求标头,以查看收到的标头:

 def post(self):
    print(request.headers)
    # Rest of your code
© www.soinside.com 2019 - 2024. All rights reserved.