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

implementing HTTP method PATCH in python using bottle framework and pymongo

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

数据库的设置方式如下

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

我放入db的数据

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 方法不允许:请求的 url 导致错误。 请帮我弄清楚我做错了什么。 谢谢。

发现错误。我的路由设置不正确,导致了 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'}