如何结合Flask REST API和Flask Web App?

时间:2018-11-07 14:40:18

标签: flask flask-restful flask-appbuilder

我正在尝试将api与应用程序结合使用,但是POST出现问题。

当我尝试使用Web App GUI张贴“项目”时,我能够执行GET命令: 不允许的方法 所请求的网址不允许使用此方法。

主要部分

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

ItemModel

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,表单...添加项目。

0 个答案:

没有答案