[英]Can't seem to figure out why looping through values in a request argument is splitting values
所以我試圖遍歷存儲在 Flask 中的 API 參數中的值。我遇到的問題是這些值被打印為單個字母,而不是返回所有逗號分隔值。 我想知道這是否是因為我不應該將列表傳遞給我的 API url?
-----------------------------------------------------------------------------------------------
main.py
fruits= ["orange", "apple", "lemon"]
for fruit in fruits:
print(fruit) ---> orange
apple
lemon
response = requests.get(f"127.0.0.1:9000/food?fruits={fruits}")
-----------------------------------------------------------------------------------------------
flask_api.py
from flask import Flask
@app.route('/food', methods=['GET'])
def food():
fruits = request.args.get("fruits")
print(fruits) ---> ["orange", "apple", "lemon"]
for fruit in fruits:
print(fruit) ---> [o r a n g e a p p l e l e m o n]
return fruits
if __name__ == "__main__":
app.run(debug=True, port=9000)
編輯:
這是我收到回復后修改的代碼。
-----------------------
main.py
fruits= ["orange", "apple", "lemon"]
for fruit in fruits:
print(fruit) ---> orange
apple
lemon
response = requests.get(f"127.0.0.1:9000/food", params={"fruits":fruits})
-----------------------------------------------------------------------------------------------
flask_api.py
from flask import Flask
@app.route('/food', methods=['GET'])
def food():
fruits = request.args.get("fruits")
print(fruits) ---> ["orange"]
for fruit in fruits:
print(fruit) ---> [o r a n g e ]
return fruits
if __name__ == "__main__":
app.run(debug=True, port=9000)
您錯誤地注入了參數。 這是你所做的:
from requests import Request
fruits = ['orange', 'lemon']
r = Request('GET',f'https://127.0.0.1:9000/food?fruits={fruits}')
u = r.prepare()
u.url
"https://127.0.0.1:9000/food?fruits=['orange',%20'lemon']"
這是應該做的:
r = Request('GET','https://127.0.0.1:9000/food', params={'fruits': fruits})
u = r.prepare()
u.url
'https://127.0.0.1:9000/food?fruits=orange&fruits=lemon'
在第一個示例中,所有水果都作為列表的字符串表示形式發送,在第二個示例中,它們作為單獨的查詢參數發送。 作為常規請求調用:
r = requests.get('https://127.0.0.1:9000/food', params={'fruits': fruits})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.