Je fais mes premiers pas dans django ici, en construisant une simple api crud où j'ai deux entités : device et property.
mon projet urls.py
ressemble à ceci :
from django.contrib import admin
from django.urls import include, path
from devices.views import index
urlpatterns = [
path('', index, name='index'),
path('admin/', admin.site.urls),
path('api/', include('devices.urls')),
]
et mon application urls.py
comme suit :
from django.urls import path
from . import views
urlpatterns = [
path('device/create/', views.DeviceCreate.as_view()),
path('device/update/<int:pk>/', views.DeviceUpdate.as_view()),
path('device/delete/<int:pk>/', views.DeviceDelete.as_view()),
path('device/', views.DeviceList.as_view()),
path('device/<int:pk>/', views.DeviceDetail.as_view()),
path('property/create/', views.PropertyCreate.as_view()),
path('property/update/<int:pk>/', views.PropertyUpdate.as_view()),
path('property/delete/<int:pk>/', views.PropertyDelete.as_view()),
path('property/', views.PropertyList.as_view()),
path('property/<int:pk>/', views.PropertyDetail.as_view()),
]
ce qui est quelque peu répétitif mais bon, le vrai problème est que mon fichier de vues est bien plus répétitif :
from rest_framework import generics
from .models import Device, Property
from .serializers import DeviceSerializer, PropertySerializer
from django.shortcuts import render
def index(request):
return render(request, 'index.html')
class DeviceCreate(generics.CreateAPIView):
queryset = Device.objects.all()
serializer_class = DeviceSerializer
class DeviceList(generics.ListAPIView):
queryset = Device.objects.all()
serializer_class = DeviceSerializer
class DeviceUpdate(generics.UpdateAPIView):
queryset = Device.objects.all()
serializer_class = DeviceSerializer
class DeviceDelete(generics.DestroyAPIView):
queryset = Device.objects.all()
serializer_class = DeviceSerializer
class DeviceDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = Device.objects.all()
serializer_class = DeviceSerializer
class PropertyCreate(generics.CreateAPIView):
queryset = Property.objects.all()
serializer_class = PropertySerializer
class PropertyList(generics.ListAPIView):
queryset = Property.objects.all()
serializer_class = PropertySerializer
class PropertyUpdate(generics.UpdateAPIView):
queryset = Property.objects.all()
serializer_class = PropertySerializer
class PropertyDelete(generics.DestroyAPIView):
queryset = Property.objects.all()
serializer_class = PropertySerializer
class PropertyDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = Property.objects.all()
serializer_class = PropertySerializer
J'ai cherché des exemples sur le web et cela semble être une méthode valable (de plus, mon application fonctionne), mais y a-t-il un moyen d'améliorer ma façon de faire ? views.py
pour obtenir le même résultat avec moins de code ?