【问题标题】:Should I make external API calls in django model managers我应该在 django 模型管理器中进行外部 API 调用吗
【发布时间】:2019-04-21 21:42:36
【问题描述】:

我有本地 django 模型,这些模型反映了一些外部服务的实体。所以基本上当我创建一个本地对象时,我首先向服务发出 post 请求,然后用响应中的数据填充本地对象的字段并保存它。

将外部 api 调用放到模型管理器以抽象视图和测试的逻辑是否是个好主意?还是有更好的方法?

我想要实现的是避免代码库中到处都有重复的逻辑。

【问题讨论】:

    标签: django api model


    【解决方案1】:

    模型管理器似乎是个好主意。但也许将外部 api 调用的这些逻辑放在一个单独的类中会更好。例如:

    class ExternalApiService(object):
        model = ModelName
    
        def create_object(self, **kwargs):
            # create model object
            self.model.objects.create(**kwargs)
    
        def call_external_api(self):
            # returns json response from API
    
        def process_api_response(self, json_response):
            # process response
    
        def get_latest_object(self):
            # get latest object
    
        def get_object(self, pk):
            # get object
    

    并在视图中使用它们。

    service = ExternalApiService()
    
    class SomeView(ListView):
        queryset = service.get_queryset()
    
        def get_context_data(self, *args, **kwargs):
            context = super(SomeView, self).get_context_data(*args, **kwargs)
            context['something_specific'] = service.get_latest_object()
            return context
    

    使用这种分层的好处是将模型和视图与业务逻辑和外部服务分开。也提供了更大的灵活性,因为您可以从服务类对象访问外部 api,而无需访问模型或依赖于模型。

    【讨论】:

      猜你喜欢
      • 2022-12-01
      • 2019-05-01
      • 2010-12-05
      • 1970-01-01
      • 2019-09-10
      • 2011-11-15
      • 2013-08-20
      • 2019-01-12
      • 2014-07-30
      相关资源
      最近更新 更多