有第四种方法可以做到这一点,它在@seppo-erviälä 方法 1 和方法 2 上进行了扩展:
方法四:API View + Django View via Handler
创建一个返回 RESTful 资源的处理程序,就像通常的 RESTful API 视图一样。但是这个处理程序可以从任何地方调用。它获取视图获取的相同请求字典,并返回视图返回的相同 JSON。所以现在,架构是:
Handler
/ | \
/ | \
/ | \
/ | \
RESTfulView | Normal Django View
|
Anything Else
处理程序:
class ResourceHandler:
def create_resource(self, data):
# code
def fetch_resource(self, rId):
# code
# and so on
你从这样的视图中调用它:
# /views/restfulview.py
# using django-rest-framework
from rest_framework.response import Response
class RESTCallView(APIView):
h = ResourceHandler()
def get(self, request, rId):
return Response(self.h.fetch_resource(rId))
# /views/normalview.py
from django.views.generic.base import TemplateView
class SomeDjangoView(TemplateView):
h = ResourceHandler()
def get(self, request, rId):
return HttpResponse(self.h.fetch_resource(rId))
当然,这只是示例代码,并不是真正的 Pythonic,但你明白了。
我在一家大型电子商务公司工作,我的一些队友使用这种方法取得了巨大的成功。
其他一些优点是:
- 旧数据的迁移现在变得容易多了,因为您只需要创建
dict
并将其发送到Handler
. 同样,同步也变得容易得多。
- 对 API 的更改集中在一处,您可以在不终止对数据的访问的情况下切断应用程序。
希望这对你也有帮助.. :)