[英]Django views - Using requests
如果我在這里有一個像這樣的 views.py 函數:
#imports
env = environ.Env()
environ.Env.read_env()
def stocks(request):
input_ticker = request.POST['ticker']
response = requests.get(f"https://cloud.iexapis.com/v1/stock/" +
input_ticker + "/quote?displayPercent=true&token=" + env('API_IEX'))
parsed = response.json()
return render(request, 'result_api.html', {'api': parsed})
如果我想添加 10-15 個類似的請求,如何提高代碼的靈活性和效率?
(...)
response2 = requests.get(f"https://cloud.iexapis.com/anything/anything/" +
input_ticker + "/anything=true&token=" + env('API_IEX'))
response3 = requests.get(f"https://cloud.iexapis.com/anything/anything2/" +
input_ticker + "/anything2=true&token=" + env('API_IEX'))
(...)
parsed2 = response2.json()
parsed3 = response2.json()
(...)
return render(request, 'result_api.html', {'api': parsed,
'api2': parsed2,
'api3': parsed3 , })
這將是非常重復的,所以我認為這里需要一個更好的方法來解決這個問題。
PS:我更喜歡 Django 而不是 Python atm。 可能我在這里錯過了一些明顯的東西:D
如果我想添加 10-15 個類似的請求,如何提高代碼的靈活性和效率?
我對效率知之甚少,但是您可以做一些小技巧來“自動化”編碼請求,而不是復制粘貼它們,它涉及數組和 string_replacements
max_requests=15 #change it to N
response_list=[]
#note that this loop goes 0-14 but you can change it if you like
for i in range(0,max_requests):
response_list.append( requests.get(f"https://cloud.iexapis.com/anything/anything{i}/" +
input_ticker + "/anything{i}=true&token=" + env('API_IEX')) )
parsed_list=[]
for i in range(0,max_requests):
parsed_list.append( response_list[i].json() )
return_dict={}
for i in range(0, max_requests):
return_dict[f"api{i}"]=parsed_list[i]
#the end result will have api0,api1 instead of api,api1
return render(request, 'result_api.html',return_dict)
有更多方法可以使這段代碼更具可讀性和內容,但這是我在離開之前可以想到的。
在效率方面,看起來你正在使用 DJango,應該有一些庫來優化大量請求,但是如果你不想 lib-hunt 你總是可以考慮異步請求的並行性,但是我仍然是一個菜鳥在這個區域。
編輯:再試一次:
max_requests=15 #change it to whatever you like
return_dict=dict(zip([f"api{i}" for i in range(0,max_requests)],[request.json() for request in [requests.get(f"https://cloud.iexapis.com/anything/anything{i}/" +
input_ticker + "/anything{i}=true&token=" + env('API_IEX')) for i in range(0,max_requests)]]))
return render(request, 'result_api.html',return_dict)
如果它有效,那就太好了(但我不確定 request.get() 是否適用於列表理解)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.