diff --git a/Dockerfile b/Dockerfile index 7bd5303..8081524 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,20 +1,14 @@ -# Используем официальный образ Python + FROM python:3.11-slim -# Устанавливаем рабочую директорию WORKDIR /app -# Копируем зависимости COPY requirements.txt . -# Устанавливаем зависимости RUN pip install --no-cache-dir -r requirements.txt -# Копируем всё приложение в контейнер COPY . . -# Указываем переменные окружения (они будут приходить извне) ENV PYTHONUNBUFFERED=1 -# Команда запуска сервера CMD ["python", "weather_project/manage.py", "runserver", "0.0.0.0:8000"] diff --git a/requirements.txt b/requirements.txt index 0139f1b..743ab48 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,4 @@ Django>=4.2 -requests \ No newline at end of file +requests +celery +django-celery-beat \ No newline at end of file diff --git a/weather_project/weather/forms.py b/weather_project/weather/forms.py new file mode 100644 index 0000000..6fbdea0 --- /dev/null +++ b/weather_project/weather/forms.py @@ -0,0 +1,5 @@ +from django import forms + +class EmailScheduleForm(forms.Form): + city = forms.CharField(max_length=100) + email = forms.EmailField() \ No newline at end of file diff --git a/weather_project/weather/tasks.py b/weather_project/weather/tasks.py new file mode 100644 index 0000000..557e8d2 --- /dev/null +++ b/weather_project/weather/tasks.py @@ -0,0 +1,36 @@ +import os +import requests +import logging +from celery import shared_task +from django.core.mail import send_mail + +from django.conf import settings + +logger = logging.getLogger(__name__) +API_KEY = 'a7cc162fc60a76d2e31461071634b8ce' + + +@shared_task +def send_weather_email(city, email): + url = f'https://api.openweathermap.org/data/2.5/weather?q={city}&appid={API_KEY}&units=metric&lang=en' + + try: + response = requests.get(url) + response.raise_for_status() + data = response.json() + + temp = data['main']['temp'] + description = data['weather'][0]['description'] + message = f"Weather in {city}: {description}, {temp}°C" + + send_mail( + subject=f"Weather in {city}", + message=message, + from_email=settings.DEFAULT_FROM_EMAIL, + recipient_list=[email] + ) + + logger.info(f"[send_weather_email] Email sent successfully") + + except Exception as e: + logger.exception(f"[send_weather_email] Failed: {e}") diff --git a/weather_project/weather/templates/weather/index.html b/weather_project/weather/templates/weather/index.html index 8bd1133..5c70037 100644 --- a/weather_project/weather/templates/weather/index.html +++ b/weather_project/weather/templates/weather/index.html @@ -34,7 +34,8 @@ width: 250px; } - button { + button, + .link-button { padding: 0.6rem 1.2rem; font-size: 1rem; border: none; @@ -43,9 +44,13 @@ border-radius: 8px; cursor: pointer; transition: background-color 0.3s ease; + text-decoration: none; + display: inline-block; + text-align: center; } - button:hover { + button:hover, + .link-button:hover { background-color: #0056b3; } @@ -69,10 +74,15 @@ color: red; font-weight: bold; } + + .bottom-link { + margin-top: 2rem; + }
-