Taking my first steps in django here, building a simple crud api where i have two entities: device and property.
my project urls.py looks like this:
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')),
]
and my app urls.py as follows:
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()),
]
which is somewhat repetitive but ok, the real problem is my views file is far more repetitive:
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
i looked over the web for example's and it does seem like a valid way (plus my app is working) but is there a way to improve my views.py file to get the same result with less code?