Saq*_*Ali 13 python django rest
我正在构建一个Django应用程序,它公开了一个REST API,用户可以通过它查询我的应用程序的模型.我按照这里的说明操作
我的路线在mySites url.py中看起来像这样:
router.register(r'myObjects', views.MyObjectsViewSet)
....
url(r'^api/', include(router.urls)),
Run Code Online (Sandbox Code Playgroud)
我的Serializer看起来像这样:
class MyObjectSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = MyObject
fields = ('id', 'name',)
Run Code Online (Sandbox Code Playgroud)
我的Viewset看起来像这样:
class MyObjectsViewSet(viewsets.ModelViewSet):
queryset = MyObjects.objects.all()
serializer_class = MyObjectSerializer
Run Code Online (Sandbox Code Playgroud)
当我点击API/api/myObjects /时,它给出了所有myObject模型的列表.当我点击API/api/myObjects/60 /时它只给我id = = 60的myObject.到目前为止很棒!
但是,我想改变MyObjectsViewSet()的逻辑,以便我可以操作/更改当我点击/ api/myObjects/60 /时返回的内容.因此,我不想做MyObjects.objects.all(),而是根据myObject ID为60做一些更复杂的事情.但是我怎么能这样做?在这个视图中,我怎么能抓住这个数字60?它不作为参数传递.但我真的需要它!
小智 14
在您的路由器中,再注册一个以下网址:
router.register(r'myObjects/(?P<id>\d+)', views.MyObjectsViewSet)
Run Code Online (Sandbox Code Playgroud)
在您的视图中,您可以使用以下命令获取ID:
self.kwargs['id']
Run Code Online (Sandbox Code Playgroud)
参考:http://www.django-rest-framework.org/api-guide/filtering#filtering-against-the-url
我认为您可以更新多个操作的视图,例如
class RetrieveUpdateAPIView(mixins.RetrieveModelMixin,
mixins.UpdateModelMixin,
generics.SingleObjectAPIView):
"""
Concrete view for retrieving or updating a model instance.
FIXME: the newest version of rest_framework has this class
"""
def get(self, request, *args, **kwargs):
return self.retrieve(request, *args, **kwargs)
def put(self, request, *args, **kwargs):
return self.update(request, *args, **kwargs)
def create(self, request, *args, **kwargs):
return self.create(request, *args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
请观看本教程,它将帮助您了解 REST 框架。
归档时间: |
|
查看次数: |
8149 次 |
最近记录: |