Files
gauvainboiche 0d071d2843 Semaine 11
2026-07-11 21:38:00 +02:00

121 lines
4.0 KiB
Python

from django.shortcuts import render
from django.urls import reverse_lazy
from django.views.generic import ListView, DetailView, CreateView, UpdateView, DeleteView
from django.utils.decorators import method_decorator
from django.contrib.auth.decorators import login_required
from rest_framework import viewsets, status, permissions
from rest_framework.views import APIView
from rest_framework.response import Response
from .models import Equipment
from .serializers import EquipmentSerializer
from .forms import EquipmentForm
from .permissions import IsOwner
@login_required
def list_active_equipments(request):
equipments = Equipment.objects.filter(is_active=True)
return render(request, "parc/list.html", {"equipments": equipments})
@method_decorator(login_required, name="dispatch")
class EquipmentListView(ListView):
model = Equipment
template_name = "parc/list.html"
context_object_name = "equipments"
def get_queryset(self):
return Equipment.objects.filter(is_active=True)
@method_decorator(login_required, name="dispatch")
class EquipmentDetailView(DetailView):
model = Equipment
template_name = "parc/detail.html"
context_object_name = "equipment"
@method_decorator(login_required, name="dispatch")
class EquipmentCreateView(CreateView):
model = Equipment
form_class = EquipmentForm
template_name = "parc/form.html"
success_url = reverse_lazy("equipment_list")
@method_decorator(login_required, name="dispatch")
class EquipmentUpdateView(UpdateView):
model = Equipment
form_class = EquipmentForm
template_name = "parc/form.html"
success_url = reverse_lazy("equipment_list")
@method_decorator(login_required, name="dispatch")
class EquipmentDeleteView(DeleteView):
model = Equipment
template_name = "parc/delete_confirm.html"
success_url = reverse_lazy("equipment_list")
class EquipmentListAPIView(APIView):
permission_classes = [permissions.IsAuthenticatedOrReadOnly]
def get(self, request):
equipments = Equipment.objects.all()
serializer = EquipmentSerializer(equipments, many=True)
return Response(serializer.data)
def post(self, request):
serializer = EquipmentSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
class EquipmentViewSet(viewsets.ModelViewSet):
"""
Ce ViewSet fournit automatiquement les actions :
- 'list' (GET /equipments/)
- 'retrieve' (GET /equipments/{id}/)
- 'create' (POST /equipments/)
- 'update' (PUT /equipments/{id}/)
- 'destroy' (DELETE /equipments/{id}/)
"""
permission_classes = [permissions.IsAuthenticated, IsOwner]
def get_queryset(self):
return Equipment.objects.filter(owner=self.request.user)
def perform_create(self, serializer):
serializer.save(owner=self.request.user)
# queryset = Equipment.objects.all()
serializer_class = EquipmentSerializer
import logging
logger = logging.getLogger("parc.auth")
class EquipmentViewSet(viewsets.ModelViewSet):
permission_classes = [permissions.IsAuthenticated, IsOwner]
def get_queryset(self):
return Equipment.objects.filter(owner=self.request.user)
def perform_create(self, serializer):
serializer.save(owner=self.request.user)
def handle_exception(self, exc):
response = super().handle_exception(exc)
if response.status_code in (401, 403):
logger.warning(
"Authentication failure: user=%s path=%s method=%s status=%s",
getattr(self.request.user, "username", "anonymous"),
self.request.path,
self.request.method,
response.status_code,
)
return response
serializer_class = EquipmentSerializer