我正在使用django-rest-framework
为我的webapp使用api。使用django rest框架代替default ORM provided by django
是否合适?我已经提到这个post但仍然感到困惑。由于drf-api需要创建类,我认为使用该代码处理对象更好,因为我可以重用代码。
router = routers.DefaultRouter()
router.register(r'users', views.UserViewSet)
class UserViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows users to be viewed or edited.
"""
queryset = User.objects.all()
serializer_class = UserSerializer
class UserSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = User
fields = ('url', 'username', 'email', 'groups')
如何使用django rest框架在crud
views.py
方式处理对象?
答案 0 :(得分:3)
此处有两个图层:Model
和Model Serializer
; Model
是底层。
Model
。当您需要从客户端与数据库进行交互时,您可以......
view
,它以传统的方式在服务器端呈现内容,然后从客户端发回POST
请求到查看,如果你想编辑(即django-forms
),或...... REST API
,可让您通过AJAX
请求获取和更新数据库内容。这是API
。如果您有任何必须运行的逻辑,无论您是否正在处理Model
或Model 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
变厚并使视图变薄。