我必须做类似的事情,在我的例子中为 dynamoDB 表创建一个 API,但我认为这个解决方案适用于任何 NoSQL 对象,假设它是可序列化的。例如,如果你有一个 python Dict 对象。
简而言之,Django Rest Framework 中的许多很酷的功能都需要 Django 模型,但没有它们你仍然可以做很多事情。
以下是创建所有对象的“列表”的示例。我正在对数组进行硬编码以说明情况,但希望这能说明问题
from rest_framework import generics
from rest_framework import serializers
class NoSQLSerializer(serializers.BaseSerializer):
def to_representation(self, obj):
# If you don't have a json serializable object
# you can do the transformations here
return obj
class NoSQLViewSet(generics.ListAPIView):
serializer_class = NoSQLSerializer
def get_queryset(self):
if self.request.user.is_anonymous():
return None
# This is just an example, In a real NoSQL database
# you can just return the python representation of the
# object
obj_list = [
{ 'name':'foo', 'type':1 },
{ 'name':'bar', 'type':2 },
{ 'name':'foobar', 'type':1 },
]
return obj_list
我还没有弄清楚如何使用(或者我是否可以使用)路由器,所以我不得不添加到 url 列表中:
from .api_views import NoSQLViewSet
urlpatterns = patterns('',
url(r'^api/v1/yourObjName/', NoSQLViewSet.as_view(), name='api-nosql'),
)
但在那之后,一切都运行良好,包括 HTML 视图。
我对 Titan 一无所知,但在您的情况下,您可能需要做的就是在我的示例中将 get_queryset 定义为
class NoSQLViewSet(generics.ListAPIView):
serializer_class = TitanSerializer
def get_queryset(self):
return MyNosqlobject.objects.all()
然后只专注于让 TitanSerializer 工作。
希望这会有所帮助。