asyns requests to api in django view
у меня есть джанго аппликация и мне нужно в одной вюхе вернуть значение с одной апи Например: человек будет заходить на страницу, будет делаться запрос к апи и возвращать значение мне интересно надо делать запросы асинхронно? если на эту страницу будут заходить много людей вот мой код:
import aiohttp
import asynsio
asyns def get_rate():
url = 'https://api.ratesapi.io/api/latest?base=USD&symbols=GBP'
async with session.get(url) as response:
json_response = await response.json()
return json_response
def test_view(request):
usd = asyncio.run(get_rate())['ratest]["USD]
return render(request, '???.html', {'usd':usd})
правильно так или нужно по другому??
Ответы (1 шт):
Автор решения: eri
→ Ссылка
Правильный вызов асинхронного кода в Django такой
https://docs.djangoproject.com/en/3.1/topics/async/#async-to-sync
from asgiref.sync import async_to_sync
import aiohttp
import asynsio
@async_to_sync
async def get_rate():
url = 'https://api.ratesapi.io/api/latest?base=USD&symbols=GBP'
async with session.get(url) as response:
json_response = await response.json()
return json_response
def test_view(request):
usd = get_rate()['ratest]["USD]
return render(request, '???.html', {'usd':usd})
Но использовать вызовы для каждого запроса - плохая идея. Используйте кеш https://docs.djangoproject.com/en/3.1/topics/cache/
from django.core.cache import cache
....
usd = cache.get_or_set("USD", get_rate, timeout=60)['ratest]["USD]