如何在 Flask 和 Pymongo 中正确编写 "Patch" 端点
How to properly write a "Patch" endpoint in flask and Pymongo
我对一般的 API 和编码不熟悉,所以我真的很难让 Flask 和 PyMongo 正确地协同工作(因为我不知道我在做什么)。我正在尝试为 PATCH 请求编写一个简单的端点。代码在这里:
@app.route('/update-instructor/<id>', methods=['PATCH'])
def update_one_instructor(id):
id = ObjectId(id)
id_call = {"_id" : id}
course = request.json.get("course")
email = request.json.get("email")
first = request.json.get("first")
last = request.json.get("last")
password = request.json.get("password")
role = request.json.get("role")
updateObject = {
"course": course,
"email": email,
"first": first,
"last": last,
"password": password,
"role": role
}
result = instructors.find_one_and_update(id_call, {"$set":updateObject}, return_document=ReturnDocument.AFTER)
return f'Instructor information updated {updateObject}'
但是,当我将其传递到我的数据库时,它会更新我设置的字段,但将其他所有内容设置为 'null'。因此,如果在 Postman 中,我提交:
{
"first" : "Jim"
}
它有效,但所有其他字段(以前保存的值)都设置为空。显然,我不想在执行 PATCH 请求时设置 JSON 中的每个键值对,对吗?这到底是怎么回事?
我对这里写的理解是,它使用BSON获取ObjectId并找到instructor,然后每个变量使用request.json找到当前值是什么。然后将它们传递给 updateObject(我认为默认值是以前保存的值,除非 Postman 中的正文另有说明......)然后将其传递给 pymongo find_one_and_update 方法。
请新手帮帮忙!谢谢!
@app.route('/update-instructor/<id>', methods=['PATCH'])
def update_one_instructor(id):
request_params = request.get_json()
print(request_params)
# {'first': 'me', 'email': 'email'} only gives you the things from postman
updateObject = request_params
# updateObject = {
# "course": course,
# "email": email,
# "first": first,
# "last": last,
# "password": password,
# "role": role
# }
# Continue with your logic
return "Update Successful"
我把这个放在邮递员里:
{
"first": "me",
"email": "email"
}
我对一般的 API 和编码不熟悉,所以我真的很难让 Flask 和 PyMongo 正确地协同工作(因为我不知道我在做什么)。我正在尝试为 PATCH 请求编写一个简单的端点。代码在这里:
@app.route('/update-instructor/<id>', methods=['PATCH'])
def update_one_instructor(id):
id = ObjectId(id)
id_call = {"_id" : id}
course = request.json.get("course")
email = request.json.get("email")
first = request.json.get("first")
last = request.json.get("last")
password = request.json.get("password")
role = request.json.get("role")
updateObject = {
"course": course,
"email": email,
"first": first,
"last": last,
"password": password,
"role": role
}
result = instructors.find_one_and_update(id_call, {"$set":updateObject}, return_document=ReturnDocument.AFTER)
return f'Instructor information updated {updateObject}'
但是,当我将其传递到我的数据库时,它会更新我设置的字段,但将其他所有内容设置为 'null'。因此,如果在 Postman 中,我提交:
{
"first" : "Jim"
}
它有效,但所有其他字段(以前保存的值)都设置为空。显然,我不想在执行 PATCH 请求时设置 JSON 中的每个键值对,对吗?这到底是怎么回事?
我对这里写的理解是,它使用BSON获取ObjectId并找到instructor,然后每个变量使用request.json找到当前值是什么。然后将它们传递给 updateObject(我认为默认值是以前保存的值,除非 Postman 中的正文另有说明......)然后将其传递给 pymongo find_one_and_update 方法。
请新手帮帮忙!谢谢!
@app.route('/update-instructor/<id>', methods=['PATCH'])
def update_one_instructor(id):
request_params = request.get_json()
print(request_params)
# {'first': 'me', 'email': 'email'} only gives you the things from postman
updateObject = request_params
# updateObject = {
# "course": course,
# "email": email,
# "first": first,
# "last": last,
# "password": password,
# "role": role
# }
# Continue with your logic
return "Update Successful"
我把这个放在邮递员里:
{
"first": "me",
"email": "email"
}