除了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)
在 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