我正在使用 Flask-RESTful 創建一個 API,并試圖創建一個資源來回傳資料庫中的所有專案,這些專案就像用戶定義的字串。
此資源的端點定義為:
api = Api(app)
api.add_resource(ItemsList, '/privateapi/item?query=<string:tag>')
資源本身是:
class ItemsList(Resource):
def get(self, tag):
search = f"%{tag}%"
items = ItemModel.query.filter(ItemModel.item_name.like(search)).all()
return {"items": [item.json() for item in items]}
問題是當我向端點發送 GET 請求時,http://127.0.0.1:5000/privateapi/item?query=appl我得到了404回應。
當我將端點更改為api.add_resource(ItemsList, '/privateapi/item/<string:tag>')然后查詢 API 時,我得到了所需的回應。
但是,我更喜歡使用查詢方法,因為我不想獲取單個記錄,而是想回傳一個陣列。我只是覺得這樣更有意義。
我可以嘗試什么?
uj5u.com熱心網友回復:
在燒瓶中,查詢引數不用于匹配路由(只有 URL 的路徑部分是相關的)。當你寫:
api.add_resource(ItemsList, '/privateapi/item?query=<string:tag>')
您創建了一條永遠不會匹配的路線(嗯,不完全是;見下文)。
您可以訪問值中的查詢引數request.args,如下所示:
from flask import Flask, request
from flask_restful import Resource, Api
app = Flask(__name__)
api = Api(app)
class ItemsList(Resource):
def get(self):
query = request.args.get("query")
return f"Query expression was: {query}"
api.add_resource(ItemsList, "/privateapi/item")
if __name__ == "__main__":
app.run(debug=True)
使用上面的代碼,如果我寫:
curl http://127.0.0.1:5000/privateapi/item?query=appl
我得到的回應是:
"Query expression was: appl"
當我說“你創造了一條永遠不會匹配的路線”時,這實際上是一個謊言。事實上,您已經創建了一個?在 URL 路徑中需要文字的路由,因此如果您要對該 URL 發出請求:
curl http://127.0.0.1:5000/privateapi/item?query=appl
它會起作用,但這不是你想要的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/467913.html
上一篇:Linux網路編程示例
