Добавил игнор статистики

This commit is contained in:
NikDizell 2025-11-12 15:26:36 +03:00
parent 4494d2f2de
commit 32b1ec4379
2 changed files with 85 additions and 0 deletions

View File

@ -20,6 +20,87 @@ menu = [
]
# === ДОБАВЬТЕ ЭТИ ФУНКЦИИ ЗДЕСЬ ===
def get_client_ip(request):
"""Получаем реальный IP клиента"""
x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
if x_forwarded_for:
ip = x_forwarded_for.split(',')[0]
else:
ip = request.META.get('REMOTE_ADDR')
return ip
def should_track_request(request):
"""Определяем, нужно ли отслеживать запрос"""
client_ip = get_client_ip(request)
path = request.path
# Игнорируемые пути (Nextcloud специфичные)
nextcloud_paths = [
'/index.php',
'/status.php',
'/cron',
'/remote.php',
'/ocs',
'/apps/',
'/custom_apps/',
]
# Игнорируемые IP (Docker сети)
docker_ips = [
'192.168.64.1',
'192.168.65.1',
'172.17.0.1',
'172.18.0.1',
'172.19.0.1',
]
# Игнорируем статические файлы и админку
if path.startswith('/static/') or path.startswith('/admin/'):
return False
# Не отслеживаем Nextcloud и Docker запросы
if any(path.startswith(p) for p in nextcloud_paths):
return False
if client_ip in docker_ips:
return False
return True
def track_page_view(request):
"""Основная функция отслеживания просмотров"""
if not should_track_request(request):
return
try:
PageView.objects.create(
url=request.path,
ip_address=get_client_ip(request),
user_agent=request.META.get('HTTP_USER_AGENT', '')[:500],
referer=request.META.get('HTTP_REFERER', '')[:500],
)
except Exception as e:
print(f"Error tracking page: {e}")
def track_view(view_func):
"""Декоратор для отслеживания просмотров страниц"""
from functools import wraps
@wraps(view_func)
def _wrapped_view(request, *args, **kwargs):
# Отслеживаем просмотр перед выполнением view
track_page_view(request)
return view_func(request, *args, **kwargs)
return _wrapped_view
@track_view
def index(request):
posts = Home.objects.filter(is_published=True)
context = {
@ -31,6 +112,7 @@ def index(request):
return render(request, 'programmer/index.html', context=context)
@track_view
def about(request):
context = {
'menu': menu,
@ -39,6 +121,7 @@ def about(request):
return render(request, 'programmer/about.html', context=context)
@track_view
def solution(request):
posts = Solution.objects.filter(is_published=True)
context = {
@ -49,6 +132,7 @@ def solution(request):
return render(request, 'programmer/solution.html', context=context)
@track_view
def ability(request):
posts = Competence.objects.filter(is_published=True)
context = {
@ -59,6 +143,7 @@ def ability(request):
return render(request, 'programmer/competence.html', context=context)
@track_view
def recall(request):
posts = Recall.objects.filter(is_published=True)
context = {