Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Django中实现服务层?_Django_Django Models_Django Rest Framework_Django Views - Fatal编程技术网

如何在Django中实现服务层?

如何在Django中实现服务层?,django,django-models,django-rest-framework,django-views,Django,Django Models,Django Rest Framework,Django Views,我在本文和本视频中看到,使用服务层在Django中构建REST应用程序非常有用,因为将业务逻辑放在模型层或视图层并不是最佳选择。你能和我分享一下Django中一些简单的服务模型吗?最好的基于DRF的企业应用程序是在Django和DRF上开发的,其结构如下:- 代理模型(即目的-默认模型保持干净,所有基于对象 这里是业务逻辑。) 自定义管理器(即purpose-DAO(数据访问逻辑))在这里,我们也可以实现 代码的可重用性) 服务层(即目的-核心业务逻辑,因此您的视图类 (具有更高的可读性)

我在本文和本视频中看到,使用服务层在Django中构建REST应用程序非常有用,因为将业务逻辑放在模型层或视图层并不是最佳选择。你能和我分享一下Django中一些简单的服务模型吗?

最好的基于DRF的企业应用程序是在Django和DRF上开发的,其结构如下:-

  • 代理模型(即目的-默认模型保持干净,所有基于对象 这里是业务逻辑。)
  • 自定义管理器(即purpose-DAO(数据访问逻辑))在这里,我们也可以实现
    代码的可重用性)
  • 服务层(即目的-核心业务逻辑,因此您的视图类 (具有更高的可读性)
服务层示例:

class RecoInfoService():

    def get_initiated_reco_detail(self, request, id):
        obj = RecoInfoProxy.objects.get_initiated_reco_by_id(id=id)
        serial_data = GetRecoInfoSerializer(obj)
        return Response(serial_data.data, status=status.HTTP_200_OK)


    def initiate_reco(self, request):
        line_items_service = LineItemsService()
        print(request.data, type(request.data),"in INITIA")
        serial_data = RecoInfoSerializer(data=request.data, many=True, context={'request':request})
        if serial_data.is_valid(raise_exception=True):
            with transaction.atomic(), reversion.create_revision():
                createdObj = reversion_post(request, serial_data)
                self.trigger_reco_initiation_notification(createdObj)
                line_items_service.prefetch_reco_initiation_lineitems(createdObj)
            return createdObj
现在,从您的
视图.py
,将此服务方法称为:

class RecoInfoView(views.APIView):

    def post(self, request, **kwargs):
        operation = kwargs.get('operation')
        initiate_reco_service = RecoInfoService()
        if operation == 'request':
            reco_info_obj = initiate_reco_service.initiate_reco(request)
            return Response('msg  : Initiate Reco Successfull')