1. models
from django. db import models
class Book ( models. Model) :
title = models. CharField( max_length= 32 )
price = models. IntegerField( )
pub_date = models. DateField( )
publish = models. ForeignKey( "Publish" )
authors = models. ManyToManyField( "Author" )
def __str__ ( self) :
return self. title
class Publish ( models. Model) :
name = models. CharField( max_length= 32 )
email = models. EmailField( )
def __str__ ( self) :
return self. name
class Author ( models. Model) :
name = models. CharField( max_length= 32 )
age = models. IntegerField( )
def __str__ ( self) :
return self. name
2. 在app下新建serializers.py并编辑
from app01. models import *
from rest_framework import serializers
from rest_framework. serializers import Serializer
class PublishModelSerializer ( serializers. ModelSerializer) :
class Meta :
model = Publish
fields = '__all__'
class AuthorModelSerializer ( serializers. ModelSerializer) :
class Meta :
model = Author
fields = '__all__'
class BookModelSerializer ( serializers. ModelSerializer) :
class Meta :
model = Book
fields = '__all__'
3. views & urls(层层递进)
3.1 views & urls --1–APIView
from app01. models import *
from app01. serializer import PublishModelSerializer, BookModelSerializer
from rest_framework. views import APIView
from rest_framework. response import Response
class PublisherView ( APIView) :
def get ( self, request) :
publishers_list = Publish. objects. all ( )
publishers_list_serializer = PublishModelSerializer( publishers_list, many= True )
return Response( publishers_list_serializer. data)
def post ( self, request) :
post_data = PublishModelSerializer( data= request. data)
if post_data. is_valid( ) :
post_data. save( )
return Response( post_data. data)
return Response( post_data. errors)
class PublisherDetailView ( APIView) :
def get ( self, request, pk) :
publisher = Publish. objects. get( pk= pk)
publisher_serializer = PublishModelSerializer( publisher)
return Response( publisher_serializer. data)
def put ( self, request, pk) :
publisher = Publish. objects. get( pk= pk)
publisher_ser = PublishModelSerializer( publisher, data= request. data)
if publisher_ser. is_valid( ) :
publisher_ser. save( )
return Response( publisher_ser. data)
return Response( publisher_ser. errors)
def delete ( self, request, pk) :
Publish. objects. get( pk= pk) . delete( )
return Response( )
urlpatterns = [
url( r'^publishers/$' , views. PublisherView. as_view( ) ) ,
url( r'^publishers/(?P<pk>\d+)/$' , views. PublisherDetailView. as_view( ) ) ,
]
3.2 views & urls --2-- mixins 类
from app01. models import *
from app01. serializer import PublishModelSerializer, BookModelSerializer
from rest_framework import generics
from rest_framework import mixins
class PublisherView ( mixins. ListModelMixin, mixins. CreateModelMixin, generics. GenericAPIView) :
queryset = Publish. objects. all ( )
serializer_class = PublishModelSerializer
def get ( self, request, * args, ** kwargs) :
return self. list ( request, * args, ** kwargs)
def post ( self, request, * args, ** kwargs) :
return self. create( request, * args, ** kwargs)
class PublisherDetailView ( mixins. RetrieveModelMixin, mixins. UpdateModelMixin, mixins. DestroyModelMixin,
generics. GenericAPIView) :
queryset = Publish. objects. all ( )
serializer_class = PublishModelSerializer
def get ( self, request, * args, ** kwargs) :
return self. retrieve( request, * args, ** kwargs)
def put ( self, request, * args, ** kwargs) :
return self. update( request, * args, ** kwargs)
def delete ( self, request, * args, ** kwargs) :
return self. destroy( request, * args, ** kwargs)
urlpatterns = [
url( r'^publishers/$' , views. PublisherView. as_view( ) ) ,
url( r'^publishers/(?P<pk>\d+)/$' , views. PublisherDetailView. as_view( ) ) ,
3.3 views & urls --3-- 通用的类的视图
from app01. models import *
from app01. serializer import PublishModelSerializer, BookModelSerializer
from rest_framework import generics
class PublisherView ( generics. ListCreateAPIView) :
queryset = Publish. objects. all ( )
serializer_class = PublishModelSerializer
class PublisherDetailView ( generics. RetrieveUpdateDestroyAPIView) :
queryset = Publish. objects. all ( )
serializer_class = PublishModelSerializer
urlpatterns = [
url( r'^publishers/$' , views. PublisherView. as_view( ) ) ,
url( r'^publishers/(?P<pk>\d+)/$' , views. PublisherDetailView. as_view( ) ) ,
3.4 views & urls --4-- viewsets.ModelViewSet
from app01. models import *
from app01. serializer import PublishModelSerializer, BookModelSerializer
from rest_framework import viewsets
class PublisherView ( viewsets. ModelViewSet) :
queryset = Publish. objects. all ( )
serializer_class = PublishModelSerializer
class BookView ( viewsets. ModelViewSet) :
queryset = Book. objects. all ( )
serializer_class = BookModelSerializer
urlpatterns = [
url( r'^publishers/$' , views. PublisherView. as_view( { 'get' : 'list' , 'post' : 'create' } ) ) ,
url( r'^publishers/(?P<pk>\d+)/$' , views. PublisherView. as_view( {
'get' : 'retrieve' ,
'put' : 'update' ,
'patch' : 'partial_update' ,
'delete' : 'destroy'
} ) ) ,
]