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
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:
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)), ]