Я недавно познакомился с REST Framework и накопилась у меня куча вопросов...
Итак, имеется проект с такой структурой:
Вьюха / Менеджер объектов / БД
Задумка такая:
Приходит ПОСТ запрос во вьюху далее вьюха вызывает менеджер объектов, именно в менеджер забирает и/или кладет данные в БД.
Вопрос такой:
Во вью приходят чистые данные или нужно отдельно вызывать метод .is_valid(), я переживаю за SQL иньекции и всякое такое.
VIEW:
class CompanyViewSet(ModelViewSet):
"""
Вьюсет компании
"""
permission_classes = [IsAuthenticated]
model = OMCompany
serializer_class = OMCompanySerializer
def get_queryset(self):
target_company = CompanyContentManager(model=self.model, request=self.request)
return target_company.get_target_company()
CompanyContentManager
class CompanyContentManager:
"""
Базовый менеджер контента компании
в методах create используется сигнал для автогенерации поля slug
"""
def __init__(self, model=None, request=None):
self.model = model
self.request = request
def get_target_company(self) -> QuerySet:
return self.model.objects\
.select_related('author') \
.prefetch_related(Prefetch('company_objects', queryset=OMObject.objects.select_related('manager').all()),
Prefetch('company_departments'),
Prefetch('company_warehouse')) \
.filter(author__id=self.request.user.id)
def create_new_company(self) -> Model:
if not self.request.user.company:
new_company = self.model.objects.create(title=self.request['title'],
slug=slugify(self.request['title']),
location=self.request['location'],
author__id=1
)
new_company.save()
return new_company
else:
raise Http404