大家好,祝你有美好的一天!我想知道如何使用 django-rest-framework 和我的 nosql 对象 orm 创建 REST。例如,我有bulbflow,它连接到我的图形数据库Titan。 Bulbflow 允许您以 ORM 风格进行常规查询,如下所示:
MyNosqlobject.objects.all()
我想要的是能够通过 JavaScript 的 REST 接口(interface)访问我的对象,但 MyNosqlobject 不是通常的 django 模型。它实际上是图顶点的代理。
最佳答案
我必须做类似的事情,在我的例子中,为 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
我无法弄清楚如何使用(或者是否可以使用)路由器,因此我必须将其添加到网址列表中:
from .api_views import NoSQLViewSet
urlpatterns = patterns('',
url(r'^api/v1/yourObjName/', NoSQLViewSet.as_view(), name='api-nosql'),
)
但之后,一切都运行良好,包括 HTML View 。
我对泰坦一无所知,但在您的情况下,您可能需要做的就是将我的示例中的 get_queryset 定义为
class NoSQLViewSet(generics.ListAPIView):
serializer_class = TitanSerializer
def get_queryset(self):
return MyNosqlobject.objects.all()
然后专注于让 TitanSerializer 工作。
希望这有帮助。
关于python - 使用 Django 和 Titan 为 nosql 创建 REST 的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32104940/