使用bottle框架和pymongo在python中实现HTTP方法PATCH

时间:2017-11-13 05:32:15

标签: python mongodb http pymongo bottle

我正在尝试使用瓶子构建RESTful api。 我目前在实现HTTP方法PATCH时遇到了麻烦,所以我希望有人可以帮助我找出我做错了什么。 我对python,bottle和mongodb很新,所以这更像是一个学习过程。

以下是db的设置方式

dbname = "movies"
#plugin = MongoPlugin(uri, db, json_mongo=True)
connection = MongoClient(uri, 27017)
db = connection[dbname]
db[dbname].insert(movies)

我在数据库中放入的数据

movies = [{'title' : 'Blade Runner', 'rel_date' : '25 June 1982', 'prod_company' : 'Warner Bros.'},
      {'title': 'Snatch', 'rel_date': '19 January 2001', 'prod_company': 'Columbia Pictures'},
      {'title': 'The Godfather', 'rel_date': '24 March 1972', 'prod_company': 'Paramount Pictures'},
      {"title": "Fight Club", "rel_date": "21 September 1999", "prod_company": "20th Century Fox" }]

这是我处理PATCH的方法

@app.route('/<name>', method='PATCH')
def update_movie(name):
    data = request.body.read_line()
    if not data:
        abort(404, 'No data received')
    entity = json.loads(data)
    db[dbname].update({'title' : name}, {'$set':entity}}) # edited
    return {'Message' : 'The movie was updated'}

我使用Postman发送请求。如果我发送像这样的PATCH请求

http://localhost:8080/test
passing: {"rel_date": "new_date"}

我收到错误:405方法不允许:请求的网址导致错误。 请帮我弄清楚我做错了什么。 感谢。

1 个答案:

答案 0 :(得分:0)

发现错误。我的溃败没有正确设置,导致405。 还纠正了函数内部的一些错误。

@route('/movies/<name>', method='PATCH')
def update_movie(name):

    data = request.json
    if not data:
        abort(400, 'No data received')

    try:
        db[dbname].update_one({'title' : name}, {'$set': data})
    except Exception as e:
        print (e)

    return {'Message' : 'The movie was updated'}