Django REST_framework 路由控制

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

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

 

views.py 文件
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)

urls.py 文件
from django.conf.urls import url
from app01 import views

urlpatterns = [
url(r'^publish/$', views.PublishView.as_view({'get': 'list', 'post': 'create'}))
url(r'^publish/(?<pk>\d+)/$', views.PublishView.as_view({'get': 'retrieve', 'put': 'update', 'delete': 'destory'}))
]
views.py 文件
from rest_framework.viewsets import ModelViewSet
class PublishView(ModelViewSet):
queryset = models.Publish.objects.all()
serializer_class = serializers.PublishSerializer

 

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

urls.py 文件
from django.conf.urls import url, include
from app01 import views
from rest_framework import routers
router = routers.DefaultRouter()
# 参数 该视图集的路由前缀 视图集 路由名称的前缀
router.register('publish', views.PublishView, base_name='good')
urlpatterns = [
  url(r'', include(router.urls))
]

views.py 文件
from rest_framework.viewsets import ModelViewSet
class PublishView(ModelViewSet):
queryset = models.Publish.objects.all()
serializer_class = serializers.PublishSerializer

 router = routers.DefaultRouter()

生成四条路由

router = routers.SimpleRouter()

生成两条路由

 

posted @ 2019-08-07 20:02  yyfgrd  阅读(454)  评论(0)    收藏  举报