Routing rest-framework of

routing

1, a first routing written - original manner

This way is in front has been written;


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


2, the wording of the second route - a semi-automatic mode ( view class inheritance ModelViewSet )

settings.py registered 'rest_framework'


serializer.py

from rest_framework.serializers import ModelSerializer
from app01 import models

class PublishSerializers(ModelSerializer):
    class Meta:
        model = models.Publish
        fields = "__all__"


models.py

from django.db import models

# Create your models here.
class Publish(models.Model):
    name=models.CharField(max_length=32)
    city=models.CharField(max_length=64)


makemigrations
migrate
image


views.py

from django.shortcuts import render
from app01 import models
from app01 import serializer
from rest_framework.views import  APIView
from rest_framework.response import  Response
from rest_framework.viewsets import ModelViewSet


#路由的第二种写法:
class PublishView(ModelViewSet):
    queryset=models.Publish.objects.all()
    serializer_class=serializer.PublishSerializers


urls.py

from django.conf.urls import url
from django.contrib import admin
from app01 import views

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^publish/$', views.PublishView.as_view({'get':'list','post':'create'})),
    url(r'^publish/(?P<pk>\d+)$', views.PublishView.as_view({'get':'retrieve','delete':'destroy','put':'update'})),
]


test:

image


3, a third route written - automatic generation

views.py

from django.shortcuts import render
from app01 import models
from app01 import serializer
from rest_framework.views import  APIView
from rest_framework.response import  Response
from rest_framework.viewsets import ModelViewSet

# 必须继承ModelViewSet才可以用这种方式的路由
class PublishView(ModelViewSet):
    queryset=models.Publish.objects.all()
    serializer_class=serializer.PublishSerializers


urls.py

from django.conf.urls Import URL, the include
 from django.contrib Import ADMIN
 from app01 Import views 

from rest_framework.routers Import SimpleRouter, defaultrouter 

# SimpleRouter automatically generated two routes; defaultrouter automatically generating four routes 
# Router SimpleRouter = () 
Router = defaultrouter () 

# registration; publish path is 
router.register ( ' publish ' , views.PublishView) 

the urlpatterns = [ 
    URL (R & lt ' ^ ADMIN / ' , admin.site.urls),
    # url(r'^publish/$', views.PublishView.as_view({'get':'list','post':'create'})),
    # url(r'^publish/(?P<pk>\d+)$', views.PublishView.as_view({'get':'retrieve','delete':'destroy','put':'update'})),
    url(r'', include(router.urls)),
]

Guess you like

Origin www.cnblogs.com/weiyiming007/p/12521643.html