HTTP Post 的 Flask RESTful API 问题 错误

如何解决HTTP Post 的 Flask RESTful API 问题 错误

我有一个非常简单的 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()

任何帮助将不胜感激。

解决方法

return user.data,HTTPStatus.CREATED - 删除 .data,因为你想返回一个用户

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?