Аутентификация и кто и когда создал

This commit is contained in:
2025-11-01 10:26:56 +03:00
parent 78c46a2751
commit e01785fa53
44 changed files with 495 additions and 777 deletions

View File

@@ -3,10 +3,12 @@ from django.contrib import messages
from django.http import JsonResponse, HttpResponse
from django.views.decorators.http import require_GET
from django.contrib.admin.views.decorators import staff_member_required
from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator
from django.views import View
from django.views.generic import TemplateView, FormView
from django.contrib.auth.mixins import UserPassesTestMixin
from django.contrib.auth.mixins import UserPassesTestMixin, LoginRequiredMixin
from django.contrib.auth import logout
from django.db import models
import pandas as pd
from .utils import (
@@ -25,7 +27,7 @@ from io import BytesIO
class AddSatellitesView(View):
class AddSatellitesView(LoginRequiredMixin, View):
def get(self, request):
add_satellite_list()
return redirect('home')
@@ -38,7 +40,7 @@ class AddSatellitesView(View):
# print("Файл не найден")
# return redirect('home')
class AddTranspondersView(FormView):
class AddTranspondersView(LoginRequiredMixin, FormView):
template_name = 'mainapp/transponders_upload.html'
form_class = UploadFileForm
@@ -58,11 +60,26 @@ class AddTranspondersView(FormView):
messages.error(self.request, "Форма заполнена некорректно.")
return super().form_invalid(form)
class HomePageView(TemplateView):
template_name = 'mainapp/actions.html'
from django.views.generic import View
class ActionsPageView(View):
def get(self, request):
if request.user.is_authenticated:
return render(request, 'mainapp/actions.html')
else:
return render(request, 'mainapp/login_required.html')
class LoadExcelDataView(FormView):
class HomePageView(View):
def get(self, request):
if request.user.is_authenticated:
# Redirect to objitem list if authenticated
return redirect('objitem_list')
else:
return render(request, 'mainapp/login_required.html')
class LoadExcelDataView(LoginRequiredMixin, FormView):
template_name = 'mainapp/add_data_from_excel.html'
form_class = LoadExcelData
@@ -94,7 +111,7 @@ from django.core.paginator import Paginator
from django.db.models import Prefetch
from .models import Satellite, ObjItem, Parameter, Geo
class GetLocationsView(View):
class GetLocationsView(LoginRequiredMixin, View):
def get(self, request, sat_id):
locations = ObjItem.objects.filter(parameters_obj__id_satellite=sat_id)
if not locations:
@@ -122,7 +139,7 @@ class GetLocationsView(View):
"features": features
})
class LoadCsvDataView(FormView):
class LoadCsvDataView(LoginRequiredMixin, FormView):
template_name = 'mainapp/add_data_from_csv.html'
form_class = LoadCsvData
@@ -196,17 +213,23 @@ class ShowMapView(UserPassesTestMixin, View):
return render(request, 'admin/map_custom.html', context)
class ClusterTestView(View):
class ClusterTestView(LoginRequiredMixin, View):
def get(self, request):
objs = ObjItem.objects.filter(name__icontains="! Astra 4A 12654,040 [1,962] МГц H")
coords = []
for obj in objs:
coords.append((obj.id_geo.coords[1], obj.id_geo.coords[0]))
if obj.geo_obj and obj.geo_obj.coords:
coords.append((obj.geo_obj.coords.coords[1], obj.geo_obj.coords.coords[0]))
get_clusters(coords)
return JsonResponse({"success": "ок"})
class UploadVchLoadView(FormView):
def custom_logout(request):
logout(request)
return redirect('home')
class UploadVchLoadView(LoginRequiredMixin, FormView):
template_name = 'mainapp/upload_html.html'
form_class = UploadVchLoad
@@ -227,7 +250,7 @@ class UploadVchLoadView(FormView):
return super().form_invalid(form)
class LinkVchSigmaView(FormView):
class LinkVchSigmaView(LoginRequiredMixin, FormView):
template_name = 'mainapp/link_vch.html'
form_class = VchLinkForm
@@ -245,7 +268,7 @@ class LinkVchSigmaView(FormView):
return self.render_to_response(self.get_context_data(form=form))
class ProcessKubsatView(FormView):
class ProcessKubsatView(LoginRequiredMixin, FormView):
template_name = 'mainapp/process_kubsat.html'
form_class = NewEventForm
@@ -278,15 +301,16 @@ class ProcessKubsatView(FormView):
messages.error(self.request, "Форма заполнена некорректно.")
return super().form_invalid(form)
class ObjItemListView(View):
from django.contrib.auth.mixins import LoginRequiredMixin
class ObjItemListView(LoginRequiredMixin, View):
def get(self, request):
# Get satellites that have associated objects, sorted alphabetically
satellites = Satellite.objects.filter(parameters__objitems__isnull=False).distinct().order_by('name')
# Get selected satellite from query parameters
selected_sat_id = request.GET.get('satellite_id')
page_number = request.GET.get('page', 1)
items_per_page = request.GET.get('items_per_page', '25') # Default to 25 items per page
items_per_page = request.GET.get('items_per_page', '50')
# Get filter parameters
freq_min = request.GET.get('freq_min')
@@ -327,7 +351,8 @@ class ObjItemListView(View):
# Start with the basic filter
objects = ObjItem.objects.select_related(
'id_user_add__user',
'geo_obj'
'geo_obj',
'updated_by__user'
).prefetch_related(
'parameters_obj__id_satellite',
'parameters_obj__polarization',
@@ -338,7 +363,8 @@ class ObjItemListView(View):
# If no satellites are selected, start with all objects
objects = ObjItem.objects.select_related(
'id_user_add__user',
'geo_obj'
'geo_obj',
'updated_by__user'
).prefetch_related(
'parameters_obj__id_satellite',
'parameters_obj__polarization',
@@ -499,9 +525,9 @@ class ObjItemListView(View):
'frequency': f"{param.frequency:.3f}" if param and param.frequency else "-",
'freq_range': f"{param.freq_range:.3f}" if param and param.freq_range else "-",
'polarization': param.polarization.name if param and param.polarization else "-",
'bod_velocity': f"{param.bod_velocity:.3f}" if param and param.bod_velocity else "-",
'bod_velocity': f"{param.bod_velocity:.0f}" if param and param.bod_velocity else "-",
'modulation': param.modulation.name if param and param.modulation else "-",
'snr': f"{param.snr:.3f}" if param and param.snr else "-",
'snr': f"{param.snr:.0f}" if param and param.snr else "-",
'geo_coords': geo_coords,
'kupsat_coords': kupsat_coords,
'valid_coords': valid_coords,
@@ -522,7 +548,7 @@ class ObjItemListView(View):
'page_obj': page_obj,
'processed_objects': processed_objects,
'items_per_page': items_per_page,
'available_items_per_page': [10, 25, 50, 100],
'available_items_per_page': [50, 100, 500, 1000],
# Filter values
'freq_min': freq_min,
'freq_max': freq_max,