from django.http import HttpResponse, HttpResponseNotFound from .models import * from django.shortcuts import render, redirect from django.contrib import messages from .models import CallbackRequest # Импортируем из models, а не forms from .forms import CallbackForm from django.utils import timezone from datetime import timedelta from .models import PageView, Visitor from django.db.models import Count from django.contrib.auth.decorators import login_required, user_passes_test menu = [ {'title': "Главная", 'url_name': 'home'}, {'title': "Проекты", 'url_name': 'solution'}, {'title': "Компетенции", 'url_name': 'ability'}, {'title': "Отзывы", 'url_name': 'recall'}, {'title': "Обо мне", 'url_name': 'about'} ] def index(request): posts = Home.objects.filter(is_published=True) context = { 'posts': posts, 'menu': menu, 'title': "Главная страница", 'form': CallbackForm() } return render(request, 'programmer/index.html', context=context) def about(request): context = { 'menu': menu, 'title': "Обо мне" } return render(request, 'programmer/about.html', context=context) def solution(request): posts = Solution.objects.filter(is_published=True) context = { 'posts': posts, 'menu': menu, 'title': "Проекты" } return render(request, 'programmer/solution.html', context=context) def ability(request): posts = Competence.objects.filter(is_published=True) context = { 'posts': posts, 'menu': menu, 'title': "Компетенции" } return render(request, 'programmer/competence.html', context=context) def recall(request): posts = Recall.objects.filter(is_published=True) context = { 'posts': posts, 'menu': menu, 'title': "Отзывы" } return render(request, 'programmer/recall.html', context=context) def show_post(request, post_id): return HttpResponse(f"Отображение № {post_id}") def pageNotFound(request, exception): return HttpResponseNotFound('

Страница не найдена

') def callback_request(request): if request.method == 'POST': form = CallbackForm(request.POST) if form.is_valid(): # Сохраняем заявку через форму form.save() messages.success(request, '✅ Ваша заявка успешно отправлена! Я свяжусь с вами в ближайшее время.') return redirect('home') else: # Если форма невалидна, показываем ошибки for field, errors in form.errors.items(): for error in errors: messages.error(request, f'❌ Ошибка в поле {form.fields[field].label}: {error}') return redirect('home') # Если GET запрос, просто показываем главную страницу return redirect('home') def is_admin(user): return user.is_staff def is_staff(user): return user.is_staff @login_required @user_passes_test(is_staff) def statistics_view(request): today = timezone.now().date() week_ago = today - timedelta(days=7) # Статистика за сегодня today_views = PageView.objects.filter( timestamp__date=today ).count() # Статистика за неделю weekly_views = PageView.objects.filter( timestamp__date__gte=week_ago ).count() # Всего просмотров total_views = PageView.objects.count() # Популярные страницы за неделю popular_pages = PageView.objects.filter( timestamp__date__gte=week_ago ).values('url').annotate( views=Count('id') ).order_by('-views')[:10] # Уникальные посетители за неделю unique_visitors = Visitor.objects.filter( last_visit__date__gte=week_ago ).count() # Последние посещения recent_views = PageView.objects.select_related().order_by('-timestamp')[:20] context = { 'today_views': today_views, 'weekly_views': weekly_views, 'total_views': total_views, 'unique_visitors': unique_visitors, 'popular_pages': popular_pages, 'recent_views': recent_views, } return render(request, 'admin/statistics.html', context)