【问题标题】:What is the best way to create REST for nosql with Django and Titan?使用 Django 和 Titan 为 nosql 创建 REST 的最佳方法是什么?
【发布时间】:2015-11-13 07:26:42
【问题描述】:

大家好,祝你有美好的一天!我想知道,如何使用 django-rest-framework 和我的 nosql 对象 orm 创建 REST。例如,我有bulbflow,它连接到我的图形数据库Titan。 Bulbflow 允许您以 ORM 样式进行常规查询,如下所示:

MyNosqlobject.objects.all()

我想要的是能够通过 REST 接口从 javascript 访问我的对象,但 MyNosqlobject 不是通常的 django 模型。它实际上是图顶点的代理。

【问题讨论】:

    标签: python django rest titan nosql


    【解决方案1】:

    我必须做类似的事情,在我的例子中为 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 工作。

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-06
      • 2019-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-05
      • 2017-04-13
      相关资源
      最近更新 更多