【问题标题】:How can I implement service layer in Django?如何在 Django 中实现服务层?
【发布时间】:2020-10-25 15:58:03
【问题描述】:

我在这篇文章1 和这个视频2 中看到,这对于使用服务层在 Django 中构建您的 REST 应用程序非常有帮助,因为将您的业务逻辑放在模型层或视图层不是最好的选择。可以和我分享一些简单的 Django 服务模型吗?

【问题讨论】:

    标签: django django-models django-rest-framework django-views


    【解决方案1】:

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

    • 代理模型(即目的 - 您的默认模型保持干净,所有基于对象 业务逻辑在这里。)
    • 自定义管理器(即目的 - 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
    

    现在从您的views.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')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-28
      • 2012-06-09
      • 1970-01-01
      • 2011-09-02
      • 1970-01-01
      相关资源
      最近更新 更多