Аутентификация и кто и когда создал
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user