一、视图三部曲
使用混合(mixins)
之前得视图部分
# 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'^publishes/$', views.PublishView.as_view(),name="publish"), url(r'^publishes/(?P<pk>\d+)/$', views.PublishDetailView.as_view(),name="detail_publish"), url(r"^books/$", views.BookView.as_view(),name="books"), url(r'^books/(?P<pk>\d+)/$',views.BookDetailView.as_view(),name="detail_book") ] ------------------------------------------------------ # views.py from rest_framework.views import APIView, Response from app01.serializers import * class PublishView(APIView): def get(self, request): publish_list = Publish.objects.all() ret = PublishModelSerializers(publish_list, many=True) return Response(ret.data) def post(self, request): ps = PublishModelSerializers(data=request.data) if ps.is_valid(): ps.save() return Response(ps.data) else: return Response(ps.errors) class PublishDetailView(APIView): def get(self,request,pk): publish = Publish.objects.filter(pk=pk).first() ps = PublishModelSerializers(publish) return Response(ps.data) def put(self,request,pk): publish = Publish.objects.filter(pk=pk).first() ps = PublishModelSerializers(publish,data=request.data) if ps.is_valid(): ps.save() return Response(ps.data) else: return Response(ps.errors) def delete(self,request,pk): Publish.objects.filter(pk=pk).delete() return Response() class BookView(APIView): def get(self, request): book_list = Book.objects.all() ret = BookModelSerializers(book_list, many=True,context={"request":request}) return Response(ret.data) def post(self, request): bms = BookModelSerializers(data=request.data, many=False,context={"request":request}) if bms.is_valid(): bms.save() return Response(bms.data) else: return Response(bms.errors) class BookDetailView(APIView): def get(self,request,pk): book = Book.objects.filter(pk=pk).first() # 序列化 bms = BookModelSerializers(book,context={"request":request}) return Response(bms.data) def put(self,request,pk): book = Book.objects.filter(pk=pk).first() bms = BookModelSerializers(book,data=request.data,context={"request":request}) if bms.is_valid(): bms.save() return Response(bms.data) else: return Response(bms.errors) def delete(self,reqeust,pk): Book.objects.filter(pk=pk).delete() return Response() --------------------------------------------------- # serializers.py # -*- coding:utf-8 -*- from .models import * from rest_framework import serializers class PublishModelSerializers(serializers.ModelSerializer): class Meta: model = Publish fields = "__all__" class BookModelSerializers(serializers.ModelSerializer): class Meta: model = Book fields = "__all__"
from django.db import models # Create your models here. 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