【发布时间】:2021-06-25 20:42:18
【问题描述】:
我有一个非常简单的 Flask RESTful API,它是按照 Packt 书籍“Python API 开发基础”构建的。我可以成功地从数据库中获取数据,但我无法发布数据。
我正在使用 Flask、SQLAlchemy 和 flask_restful,以及一个 Microsoft Server Management Studio 本地数据库。
我目前在尝试将条目插入用户表时遇到错误。一个用户只是一个ID、姓名、年龄。我正在关注您可以在此处找到的书籍示例:https://github.com/TrainingByPackt/Python-API-Development-Fundamentals/tree/master/Lesson03/Exercise19
如果你看一下这个例子,你会发现他们用于 get 方法的示例代码对我也不起作用,我想出了自己的策略。但是我在确定 post 方法的策略时遇到了一些麻烦。
当我尝试使用以下 httpie 命令时,users.py 资源中出现此错误:http POST localhost:5000/users Name="Kyle" Age="22"
错误
[2021-03-29 15:40:58,891] ERROR in app: Exception on /users [POST]
Traceback (most recent call last):
File "c:\users\e096752\documents\cole's projects\flask projects\testproj\venv\lib\site-packages\flask\app.py", line 1950, in full_dispatch_request
rv = self.dispatch_request()
File "c:\users\e096752\documents\cole's projects\flask projects\testproj\venv\lib\site-packages\flask\app.py", line 1936, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "c:\users\e096752\documents\cole's projects\flask projects\testproj\venv\lib\site-packages\flask_restful\__init__.py", line 468, in wrapper
resp = resource(*args, **kwargs)
File "c:\users\e096752\documents\cole's projects\flask projects\testproj\venv\lib\site-packages\flask\views.py", line 89, in view
return self.dispatch_request(*args, **kwargs)
File "c:\users\e096752\documents\cole's projects\flask projects\testproj\venv\lib\site-packages\flask_restful\__init__.py", line 583, in dispatch_request
resp = meth(*args, **kwargs)
File "C:\Users\e096752\Documents\Cole's Projects\Flask Projects\testProj\resources\users.py", line 27, in post
return user.data, HTTPStatus.CREATED
AttributeError: 'User' object has no attribute 'data'
也就是说,这也是我没有使用书籍示例的原因之一,我不知道模型中的 userList 列表是做什么的,也不知道为什么要向其中添加新创建的用户。我看不到实际推送到数据库的任何地方。它只是被放在一个列表中。
用户资源
from flask import request
from flask_restful import Resource
from http import HTTPStatus
from flask import jsonify
from sqlToJson import convert_sqlaLchamy_to_json
from models.Users import User, userList
class User_List_Resource(Resource):
def get(self):
users = User.query.all()
data = jsonify(convert_sqlaLchamy_to_json(users))
return data
def post(self):
data = request.get_json()
user = User(Name=data['Name'],
Age=data['Age'])
userList.append(user)
return user.data, HTTPStatus.CREATED
顺便说一句,sqlToJson 是我写的一个文件,因为我无法让书中的示例工作。
用户模型
from extensions import db
userList = []
def get_last_id():
if userList:
lastUser = userList[-1]
else:
return 1
return lastUser.id + 1
class User(db.Model):
__tablename__ = 'Users'
ID = db.Column(db.Integer, primary_key=True)
Name = db.Column(db.String(50))
Age = db.Column(db.Integer)
app.py
>from flask import Flask, render_template
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import create_engine
from flask_restful import Resource, Api
from flask import jsonify
import json
from sqlToJson import convert_sqlaLchamy_to_json
import datetime
from flask_restful import Api
from config import Config
from extensions import db
from models.Case_Log import Case_Log
from resources.case_log import Case_Log_List_Resource
from models.Users import User
from resources.users import User_List_Resource
from resources.home import Home_Resource
def create_app():
app = Flask(__name__)
app.config.from_object(Config)
register_extensions(app)
register_resources(app)
return app
def register_extensions(app):
db.init_app(app)
def register_resources(app):
api = Api(app)
#Add all resources as routes
api.add_resource(Home_Resource, '/')
api.add_resource(Case_Log_List_Resource, '/case_logs')
api.add_resource(User_List_Resource, '/users')
if __name__ == '__main__':
app = create_app()
app.run()
任何帮助将不胜感激。
【问题讨论】:
标签: python flask sqlalchemy flask-restful