4

我正在尝试将 api 与应用程序结合使用,但我在使用 POST 时遇到问题。

我能够执行 GET,当我尝试使用 Web App GUI 发布“项目”时,我收到: 不允许的方法 请求的 URL 不允许使用该方法。

主要部分

api.add_resource(Item, '/api/v1/item/<string:name>')

if __name__ == '__main__':
    db.init_app(app)
    app.run(port=5001, debug=True)

API部分

class Item(Resource):
    parser = reqparse.RequestParser()
    parser.add_argument('price',
                    type=float,
                    required=True,
                    help="This field cannot be left blank!"
                    )
    parser.add_argument('store_id',
                    type=int,
                    required=True,
                    help="Every item needs a store id."
                    )

    def post(self, name):
        if ItemModel.find_by_name(name):
            return {'message': "An item with name '{}' already exists.".format(name)}, 400

        data = Item.parser.parse_args()
        item = ItemModel(name, **data)  # data['price'], data['store_id']

        try:
            item.save_to_db()
        except:
            return {"message": "An error occured inserting the item."}, 500  # Internal Server error

        return item.json(), 201

APP版块

@app.route('/item/<name>', methods=['POST'])
def item(name):
    data = {
        'price': '16.99',
        'store_id': '1',
    }

    r = requests.post('http://localhost:5001/api/v1/item/'+name, data)
    return r.status_code

项目模型

class ItemModel(db.Model):
     __tablename__ = 'items'

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(80))
    price = db.Column(db.Float(precision=2))
    store_id = db.Column(db.Integer, db.ForeignKey('stores.id'))

    store = db.relationship("StoreModel")

def __init__(self, name, price, store_id):
    self.name = name
    self.price = price
    self.store_id = store_id

def json(self):
    return {
            'id': self.id,
            'name': self.name,
            'price': self.price,
            'store_id': self.store_id
        }

我的意思是我想通过 GUI 添加项目,表单......

4

0 回答 0