rest-framework—–url控制

一:自定义路由(原始方式)

from django.conf.urls import urlfrom app01 import viewsurlpatterns = [ url(r^books/$, views.BookView.as_view()), url(r^books/(?P<pk>\d+)$, views.BookDetailView.as_view()),]

 

class BookView(APIView): def get(self, request): book_list = models.Book.objects.all() bs = BookSerializers(book_list, many=True) return Response(bs.data) def post(self, request): # 添加一条数据 print(request.data) bs=BookSerializers(data=request.data) if bs.is_valid(): bs.save() # 生成记录 return Response(bs.data) else: return Response(bs.errors)class BookDetailView(APIView): def get(self,request,pk): book_obj=models.Book.objects.filter(pk=pk).first() bs=BookSerializers(book_obj,many=False) return Response(bs.data) def put(self,request,pk): book_obj = models.Book.objects.filter(pk=pk).first() bs=BookSerializers(data=request.data,instance=book_obj) if bs.is_valid(): bs.save() # update return Response(bs.data) else: return Response(bs.errors) def delete(self,request,pk): models.Book.objects.filter(pk=pk).delete() return Response("")

 

二 半自动路由(视图类继承ModelViewSet)

from django.conf.urls import urlfrom app01 import viewsurlpatterns = [ url(r‘^publish/$‘, views.PublishView.as_view({‘get‘:‘list‘,‘post‘:‘create‘})), url(r‘^publish/(?P<pk>\d+)/$‘, views.PublishView.as_view({‘get‘:‘retrieve‘,‘put‘:‘update‘,‘delete‘:‘destroy‘})),]

from rest_framework.viewsets import ModelViewSetclass PublishView(ModelViewSet): queryset=models.Publish.objects.all() serializer_class=PublishSerializers


三 全自动路由(自动生成路由)

from django.conf.urls import url,includefrom app01 import viewsfrom rest_framework import routersrouter=routers.DefaultRouter()# 两个参数,一个是匹配的路由,一个是视图中写的CBV的类router.register(‘publish‘,views.PublishView)urlpatterns = [ # http://127.0.0.1:8000/publish/format=json(渲染器通过这个判断,返回渲染的页面) # url(r‘^publish/‘, views.PublishView.as_view({‘get‘:‘list‘,‘post‘:‘create‘})), # http://127.0.0.1:8000/publish.json(渲染器通过这个判断,返回渲染的页面) # url(r‘^publish\.(?P<format>\w+)$‘, views.PublishView.as_view({‘get‘:‘list‘,‘post‘:‘create‘})), # 可以用 以下方式访问 # 1 http://127.0.0.1:8000/publish/ # 2 http://127.0.0.1:8000/publish.json # 3 http://127.0.0.1:8000/publish/3 # 4 http://127.0.0.1:8000/publish/3.json url(r‘‘,include(router.urls))]

from rest_framework.viewsets import ModelViewSetclass PublishView(ModelViewSet): queryset=models.Publish.objects.all() serializer_class=PublishSerializers

 

相关文章