我正在尝试将 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 添加项目,表单......