Итак, я начинаю изучать Django и хочу создать с его помощью Rest API. Я в основном исхожу из. Net фона.
Я знаю, что Python соглашения сильно отличаются от Net, и я это хорошо понимаю, но, с моей точки зрения, я вижу много избыточности и отсутствие стандартов (Solid) при разработке приложения в Django. Поэтому я придумал свой собственный лучший стандарт.
Вот моя иерархия проектов.
[DjangoProject]:
[Finance]:
admin.py
apis.py
services.py
test.py
urls.py
models.py
[Users]:...
apis.py -> Каждый API будет иметь свой класс
class ReportCreateApi(APIView):
class InputSerializer(serializers.Serializer):
title = serializers.CharField()
description = serializers.CharField()
pictures = serializers.CharField()
lat = serializers.CharField()
long = serializers.CharField()
vote = serializers.CharField()
def post(self, request):
serializer = self.InputSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
ReportService.ireport_create(**serializer.validated_data)
return Response(status=status.HTTP_201_CREATED)
services.api -> Services будут иметь ** kwargs в качестве параметров
class ReportService:
@staticmethod
def ireport_create(**report) -> Report:
logger.info('Creating IReport')
ireport = Report(**report) #Report is a modal btw
ireport.save()
return ireport
Хотя сейчас это работает, мне это не подходит. При этом любой может передать неограниченное количество параметров, которые могут не ожидаться службами.
Каким будет лучший подход для передачи параметров в service
из api
, чтобы я мог сопоставить их с модель при создании внутри сервиса?
PS:. Net пример
/*"Finance" as a domain layer*/
public class BookKeeping
{
private String aVariable{get; set;}
public void doAccounts(TakeInputDto input)
{
//Doing something productive
}
}
/*"GatewayAPI" as API layer*/
public class FinanceAPI: Controller
{
//Constructor with dependency Injection is here not you can't see it.
public void CalculateTax()
{
_bookKeeping.doAccounts(Dto will take some accepted values)
}
}
Что эквивалентно TakeInputDto
в Python ?