【问题标题】:Can't use POST method to add new information to database无法使用 POST 方法向数据库添加新信息
【发布时间】:2016-11-03 05:51:14
【问题描述】:

我设法从帮助中弄清楚如何使用 curl 将信息发布到数据库,但我的实际代码有问题,我不知道如何修复它。在我的 POST 方法中,当我尝试从我的班级请求 json 信息时,当我使用 curl 并且它说时它不起作用。错误在行中

dev = Todo(request.json.details)
AttributeError: 'dict' object has no attribute 'details'

我正在尝试将 todo_ID、UserID、详细信息添加到数据库中的 Todo 表中。由于该错误,我还无法发布任何内容,每当我尝试输入 todo_ID 或 CustID 之类的内容时,我都会收到相同的错误消息。

我将想要使用的信息放在一个 json 文件中。看起来像这样。

{
    "todo_ID": 13,
    "UserID":  8,
    "details": "Clean up your room."
}

这是我的代码。

from flask import Flask, jsonify,json, request, abort
from flask_sqlalchemy import SQLAlchemy
import requests

app = Flask(__name__)
app.config.from_pyfile('Config.py')
db = SQLAlchemy(app)

class JsonModel(object):
def as_dict(self):
    return {c.name: getattr(self, c.name) for c in self.__table__.columns}

class User(db.Model, JsonModel):
    User_ID = db.Column(db.Integer, primary_key = True)
    FirstName = db.Column(db.String(20))
    LastName = db.Column(db.String(20))


def __init__(self,FirstName, LastName):
    self.FirstName = FirstName
    self.LastName = LastName


class Todo(db.Model, JsonModel):
    todo_ID = db.Column(db.Integer, primary_key = True)
    UserID = db.Column(db.Integer, db.ForeignKey('User_ID'))
    details = db.Column(db.String(30))

 def __init__(self,details):
        self.details = details

app.route('/', methods = ['GET'])
def index():
    return json.dumps([u.as_dict() for u in User.query.all()+Todo.query.all()])


@app.route('/', methods = ['POST'])
def create_dev():
    dev = Todo(request.json.details)
    db.session.add(dev)
    db.session.commit()
    return json.dumps([{'dev': dev}]), 201


@app.before_first_request
def startup():
    db.create_all()

if __name__ == '__main__':
    app.run()

【问题讨论】:

  • 请提供有关此错误的更多详细信息。哪条线会抛出它?
  • 错误是 dev = Todo(request.json.details) AttributeError: 'dict' object has no attribute 'details'

标签: python rest curl post flask


【解决方案1】:

Python 不是 JavaScript。而不是

dev = Todo(request.json.details)

试试这个:

dev = Todo(request.json["details"])

【讨论】:

  • 哦,谢谢!,我仍然得到错误,但它与约束有关
猜你喜欢
  • 2015-03-11
  • 1970-01-01
  • 2021-11-12
  • 1970-01-01
  • 1970-01-01
  • 2022-11-27
  • 1970-01-01
  • 2023-01-17
  • 2023-04-01
相关资源
最近更新 更多