[英]Restful Web Services [PUT Request]
我正在尋找使用 PUT 請求更新資源的問題
這是請求: METHOD PUT => http://localhost:8081/user/int:id
正文 => {“電子郵件”:“abc@bmail.com”}
Req.json.matching 用於循環 i 是索引
並且響應應該是:
a) 如果列表中存在具有匹配 id 的用戶:
http 狀態碼 200 {“消息”:“用戶已成功更新!”}
b)如果列表中不存在具有匹配id的用戶:http狀態碼404
{“消息”:“用戶不存在!”}
以下是我從 web 自行研究后嘗試的代碼:
from flask import Flask,jsonify,request
app = Flask (__name__)
users=[{"userid":1,"username":"John","email":"john@gmailer.com","role":"member","password":"abc123"}]
@app.route('/users/<int:id>',methods=["PUT"])
def updateUser(userid):
id = [user for user in users if (users['userid'] == userid)]
if 'userid' in request.json:
id[0]['userid'] = request.json['userid']
if 'email' in request.json:
id[0]['email'] = request.json['email']
return jsonify({'user':id[0]})
if __name__ == '__main__':
app.run(debug=True) #server will auto-restart when we save our changes to the code
我無法得到想要的結果。 任何幫助表示贊賞。
首先,您的要求與代碼的實際功能存在相當多的不匹配。 我想出了一個代碼片段,我認為它非常符合您的要求,但我還有一些未解決的問題。 我會在答案的末尾列出它們,以防我做出錯誤的假設。
from flask import Flask, jsonify, request, abort
app = Flask(__name__)
users = [{"userid": 1, "username": "John", "email": "john@gmailer.com", "role": "member", "password": "abc123"}]
@app.route('/users/<int:userid>', methods=["PUT"])
def updateUser(userid):
for user in users:
if user["userid"] == userid:
if 'userid' in request.json:
user['userid'] = request.json['userid']
if 'email' in request.json:
user['email'] = request.json['email']
return jsonify({'user': user})
abort(404)
if __name__ == '__main__':
app.run(debug=True)
您的代碼中有一些奇怪的東西:
id
是 python 內置名稱。 在某些情況下,這可能會導致無法預料的事情。id
變量的列表理解中有一個錯字:它說users['userid']
,但它應該是user['userid']
(注意代碼中的復數“s”)。userid
,但路由將參數定義為id
( '/users/<int:id>'
)。 它也應該是'/users/<int:userid>'
。abort
。 它取消請求並返回錯誤代碼(在本例中為 404)。200 {“message”: “User with has been successfully updated!”}
,但您的代碼會返回更新后的用戶。 我不確定在這里選擇哪個選項,所以我一直在返回用戶。這是相當多的信息,但我想提供您代碼中的所有發現。 也許它可以幫助你,你可以從中學到一些東西:) 如果它仍然沒有按預期工作,請在下面發表評論和/或更新你的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.