我有本地django模型,可以反映某些外部服务的实体。因此,基本上,当我创建本地对象时,我首先向服务发出后请求,然后使用响应中的数据填充本地对象的字段并保存。
将外部api调用放入模型管理器以抽象视图和测试的逻辑是一个好主意吗?还是有更好的方法?
我想要实现的是避免在代码库中各处重复逻辑。
答案 0 :(得分:3)
模型管理器似乎是个好主意。但是将外部api调用的逻辑放在单独的类中也许更好。例如:
componentDidUpdate() {
var that = this;
var url = window.location.href.split("/");
var slug = url.pop() || url.pop();
console.log(CelestialSettings.URL.api + "/posts?slug=" + slug);
fetch(CelestialSettings.URL.api + "/posts?slug=" + slug)
.then(function(response) {
if (!response.ok) {
throw Error(response.statusText);
}
return response.json();
})
.then(function(res) {
that.setState({ post: res[0] });
});
}
并在视图中使用它们。
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
具有此分层的优点是将模型和视图与业务逻辑和外部服务分开。还提供了更大的灵活性,因为您可以从服务类对象访问外部api,而无需访问模型或对模型的依赖。