使用django rest框架代替django orm的最佳方法

时间:2015-08-19 05:06:23

标签: django api rest django-rest-framework

我正在使用django-rest-framework为我的webapp使用api。使用django rest框架代替default ORM provided by django是否合适?我已经提到这个post但仍然感到困惑。由于drf-api需要创建类,我认为使用该代码处理对象更好,因为我可以重用代码。

urls.py

router = routers.DefaultRouter()
router.register(r'users', views.UserViewSet)

views.py

class UserViewSet(viewsets.ModelViewSet):
    """
    API endpoint that allows users to be viewed or edited.
    """
    queryset = User.objects.all()
    serializer_class = UserSerializer

serializers.py

class UserSerializer(serializers.HyperlinkedModelSerializer):

    class Meta:
        model = User
        fields = ('url', 'username', 'email', 'groups')

如何使用django rest框架在crud views.py方式处理对象?

2 个答案:

答案 0 :(得分:3)

此处有两个图层:ModelModel Serializer; Model是底层。

  • 当您需要在Django应用程序中与数据库进行交互时,您应该使用Model
  • 当您需要从客户端与数据库进行交互时,您可以......

    • A:创建一个view,它以传统的方式在服务器端呈现内容,然后从客户端发回POST请求到查看,如果你想编辑(即django-forms),或......
    • B:设置REST API,可让您通过AJAX请求获取和更新数据库内容。这是API
    • 的目的
  • 如果您有任何必须运行的逻辑,无论您是否正在处理ModelModel Serializer,那么它应该在底层实施,即Model

即使我们不构建外部应用程序,我们今天经常使用API的原因是它允许更多交互式和更快的用户界面。 今天最流行的前端框架(例如angularjs)是围绕使用API的概念构建的。

答案 1 :(得分:1)

我想在Arnar Yngvason的优秀答案中添加一个可能的场景。

  • C:您可以在视图代码中使用DRF的视图集。

     review_metas_response = ReviewMetaViewSet.as_view({
         'get': 'user_visit_list'
     })(request, format="json", limit=REVIEW_META_NUM)
    
  • D:您可以在视图代码中使用DRF的序列化程序。

     review_meta = ReviewMeta.objects.get(id=review_meta_id)
     serializer = ReviewMetaSerializer(review_meta, context=context)
    

我倾向于使model厚(许多方法)并使DRF serializer & viewset变厚并使视图变薄。