我是 flask 的新手,我試圖對包含“?”的 url 發出 GET 請求。符號,但看起來我的程式只是跳過了它的作業。我正在使用 flask-sql alchemy、flask 和 flask-restful。我的程式的一些簡化外觀如下所示:
fields_list = ['id']
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
class Get(Resource):
@staticmethod
def get():
users = User.query.all()
usr_list = Collection.user_to_json(users)
return {"Users": usr_list}, 200
class GetSorted(Resource):
@staticmethod
def get(field, type):
if field not in fields_list or type not in ['acs', 'desc']:
return {'Error': 'Wrong field or sort type'}, 400
users = db.session.execute(f"SELECT * FROM USER ORDER BY {field} {type}")
usr_list = Collection.user_to_json(users)
return {"Users": usr_list}, 200
api.add_resource(GetSorted, '/api/customers?sort=<field>&sort_type=<type>')
api.add_resource(Get, '/api/customers')
帶有 url "http://127.0.0.1:5000/api/customers?sort=id&sort_type=desc" 的輸出看起來像這樣
{
"Users": [
{
"Id": 1
},
{
"Id": 2
},
{
"Id": 3
},
]
}
但我希望它看起來像這樣
{
"Users": [
{
"Id": 3
},
{
"Id": 2
},
{
"Id": 1
},
]
}
如果我以某種方式替換“?” 在 url 中使用“/”一切正常,但我希望它與“?”一起使用
uj5u.com熱心網友回復:
為了獲得資訊后?,你必須使用request.args。此資訊是查詢引數,它是查詢字串的一部分:包含鍵值引數的 URL 部分。
如果你的路線是:
api.add_resource(GetSorted, '/api/customers?sort=<field>&sort_type=<type>')
您的關鍵值將是:
sort=<field>
sort_type=<type>
您可以獲得欄位的值并鍵入如下鍵:
sort = request.args.get('field', 'field_defaul_value')
sort_type = request.args.get('type', 'type_defaul_value')
更多資訊:
- 1個
- 2個
uj5u.com熱心網友回復:
使用 Flask,您可以像以前一樣定義路徑變數,但它們必須是路徑的一部分。例如,定義一個路徑/api/customers/<id>可用于通過 id 獲取特定客戶,將函式定義為def get(id):。不能以這種方式定義查詢引數,正如您在評論中提到的,您需要以某種方式“多載” get 函式。這是一種方法:
from flask import Flask, request
from flask_restful import Resource, Api
app = Flask(__name__)
api = Api(app)
USERS = [
{"id": 1},
{"id": 3},
{"id": 2},
]
class Get(Resource):
@classmethod
def get(cls):
if request.args:
return cls._sorted_get()
return {"Users": USERS, "args":request.args}, 200
@classmethod
def _sorted_get(cls):
field = request.args.get("sort")
type = request.args.get("sort_type")
if field not in ("id",) or type not in ['acs', 'desc']:
return {'Error': 'Wrong field or sort type'}, 400
sorted_users = sorted(USERS, key=lambda x: x[field], reverse=type=="desc")
return {"Users": sorted_users}, 200
api.add_resource(Get, '/api/customers')
if __name__ == '__main__':
app.run(debug=True)
Here is Flask's documentation about accessing request data和Flask-Restful's quickstart guide。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/536273.html
標籤:Python烧瓶烧瓶安息
上一篇:Flask遷移命令不顯示錯誤訊息
下一篇:從FLASK請求函式
