Я довольно новичок в Django и пытаюсь получить рабочий бэкэнд. Пока что мой бэкэнд работает нормально, но я не знаю, как ответить пользовательскими данными:
Что у меня есть:
Angular Интерфейс
Django (REST) Бэкэнд
- Рабочий кэш
Что я хочу достичь:
Я хочу вызвать конечную точку (скажем, бэкэнд / погода). Когда я вызываю эту конечную точку, я хочу проверить в кеше значение погоды. Если он есть, я хочу отправить его клиенту. Если его нет, я хочу сделать вызов API, сохранить полученное значение в моем кэше и отправить его клиенту. Как я могу это сделать. Вот что у меня есть:
views.py
from rest_framework import viewsets
from .models import Weather
from .serializers import WeatherSerializer
from django.core.cache import cache
from urllib.request import urlopen
import json
class WeatherView(APIView):
def get(self):
if(cache.get('temp') == None):
url = 'https://api.openweathermap.org/data/2.5/forecast?q=' + '...';
serialized_data = urlopen(url).read()
data = json.loads(serialized_data)
print(data)
cache.set('weatherdata', data, 3600)
else:
data = cache.get('weatherdata')
serializer_class = WeatherSerializer(data)
responseJSON = JSONRenderer().render(serializer_class.data)
return Response(responseJSON)
serializers.py
from rest_framework import serializers
from .models import Weather
class WeatherSerializer(serializers.Serializer):
temp = serializers.DecimalField(max_digits=4, decimal_places=2)
iconName = serializers.CharField()
urls.py
from django.urls import path, include
from . import views
from rest_framework import routers
from django.conf import settings
from django.conf.urls.static import static
router = routers.DefaultRouter()
urlpatterns = [
path('', include(router.urls)),
path('weather', views.WeatherView)
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Я получаю данные из API. Мои настройки и получение кеша тоже работают. Но я не знаю, как ответить пользовательскими данными. Я получаю следующую ошибку при вызове backend / weather:
TypeError at /weather
__init__() takes 1 positional argument but 2 were given
Request Method: GET
Request URL: http://127.0.0.1:8000/weather
Django Version: 2.2.7
Exception Type: TypeError
Exception Value:
__init__() takes 1 positional argument but 2 were given
Заранее спасибо!