Есть ли смысл индивидуализировать представления Django на основе классов?
В учебнике по Django, который я смотрю, кто-то пишет:
class GetUserProfileView(APIView):
def get(self, request, format=None):
# user profile get code
class UpdateProfileView(APIView):
def put(self, request, format=None):
# user profile put code
тогда как мне, новичку, кажется, что гораздо разумнее организовать это в одном представлении:
class ProfileView(APIView):
def get(self, request, format=None):
# user profile get code
def put(self, request, format=None):
# user profile put code
Есть ли причина для организации их в разные виды или создатель учебника неопытен?
Как правило, каждый разработчик имеет свой собственный стиль написания и организации кода.
В вашем случае, придерживаясь таких принципов чистого кода, как DRY и KISS, я бы предложил использовать такой стиль:
class UserProfileView(APIView):
def get(self, request, format=None):
# user profile get code
def put(self, request, format=None):
# user profile put code
что устраняет дублирование и избыточность представлений, основанных на классах, и делает ваш код чище. (и который я всегда использую ;)
Обычно такие представления действительно группируются, это понятие называется ViewSet
[drf-doc], которое может группировать list
(обычно GET-запрос без какого-либо "ключа" для объекта), retrieve
(обычно GET-запрос с ключом, по которому мы получаем объект), create
(обычно POST-запрос), update
(обычно PUT-запрос), partial_update
(обычно PATCH-запрос) и destroy
(обычно DELETE-запрос).
Обычно APIView
используется только в том случае, если это не сценарий "по умолчанию", например, получение объектов, их сериализация и возврат. То есть только если вы делаете что-то более сложное. Часто используются разные APIView
, например, если сериализатор или другая логика отличаются в зависимости от сценария, в этом случае логика часто не дает однозначного определения между сценариями, что делает ее менее элегантной, чем разделение на разные классы.