rest-framework url Control

A custom route (original method):

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()),
]
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("")

Two semi-automatic route (the view class inheritance ModelViewSet)

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/(?P<pk>\d+)/$', views.PublishView.as_view({'get':'retrieve','put':'update','delete':'destroy'})),

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

Three automatic routing (automatically generated routing)

from django.conf.urls Import URL, the include
 from app01 Import views
 from rest_framework Import Routers 
Router = routers.DefaultRouter ()
 # two parameters, a matching route, is a view of a class written in the CBV 
router.register ( ' publish ' , views.PublishView) 
the urlpatterns = [
     # http://127.0.0.1:8000/publish/format=json (this is determined by the renderer returns the rendered page) 
    # URL (R & lt' ^ publish / ', views. PublishView.as_view ({ 'GET': 'List', 'POST': 'Create'})), 
    # http://127.0.0.1:8000/publish.json (this is determined by the renderer returns the rendered page) 
    #URL (R & lt '.? ^ publish \ (P <the format> \ W +) $', views.PublishView.as_view ({ 'GET': 'List', 'POST': 'Create'})), 
    
    # can use the following access 
    # 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 & lt '' , the include (router.urls)) 
]
from rest_framework.viewsets import ModelViewSet
class PublishView(ModelViewSet):
    queryset=models.Publish.objects.all()
    serializer_class=PublishSerializers

 

Guess you like

Origin www.cnblogs.com/HUIWANG/p/11139674.html