0
병을 사용하여 RESTful API를 작성하려고합니다. 현재 HTTP 메소드 Patch를 구현하는 데 문제가 있습니다. 누군가 내가 잘못하고있는 것을 찾는 것을 도와 줄 수 있기를 바랍니다. 저는 파이썬, 병 및 mongodb에 대해 매우 익숙합니다. 따라서 학습 과정이 더 필요합니다. 여기 병 프레임 워크와 pymongo를 사용하여 파이썬에서 HTTP 메소드 PATCH를 구현
는 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'}
을 처리하는 것입니다 내가 DB에 넣어 데이터를 설정하는 방법입니다 요청을 보냅니다. 내가이
http://localhost:8080/test
passing: {"rel_date": "new_date"}
같은 PATCH 요청을 보내는 경우 나는 오류를 얻을 : 405 방법은 허용되지 않음 : 요청 된 URL에 오류가 발생했습니다. 내가 뭘 잘못하고 있는지 알아내는 데 도움주세요. 감사합니다. .
아마도 '패치'가 활성화되지 않은 업스트림 프록시를 통해 제공되고 있습니까? 병 자체가 허용하는 것으로 보입니다 (https://bottlepy.org/docs/dev/api.html#bottle.Bottle.patch). 귀하의 업데이트 코드가 잘못되어'entity'가 이미 유효한 dict으로 나오고 간단하게 나오기 때문에'db [dbname] .upupate ({ 'title': name}, { '$ set': entity}) ' 내용에있는 모든 경로를 덮어 쓰려고했습니다. –
@ NeeLunn 답장을 보내 주셔서 감사합니다. 그래서 문제가 코드 외부에 있다고 말할 수 있습니까? 내가 너를 정확하게 이해 했니? 코드 수정에 감사드립니다. – Nouxau
그것이 유효한 의미로 보입니다. 문서화 된 API가 메소드가 지원된다고 말하면, 오류를보고 할 수있는 유일한 것은 구현 된 요청 핸들러의 "업스트림"이어야합니다. 따라서 nginx 나 다른 프록시 메소드 또는 실제로 WSGI 컨테이너를 사용하고 있다면 아마도 거기에 있어야합니다. 필수 "hello world"로 테스트 해보십시오. –