121 lines
4.0 KiB
Python
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
|