一、GenericApiView
django-rest-framework官方文档地址:https://www.django-rest-framework.org/
1、APIview(一级视图)
为了方便测试,我们先定义两张表,一张为书籍表,一张为作者表,书籍和作者通过id来关联
我们先来看一段基本的APIview代码:
序列化器:
from rest_framework.serializers import ModelSerializer
from rest_framework import serializers
from .models import BookMessage,Author
class AuthorSerializer(ModelSerializer):
class Meta:
model = Author
fields = "__all__"
class BookSerializer(ModelSerializer):
# author = serializers.StringRelatedField(read_only=True)
author = serializers.StringRelatedField(read_only=True)
class Meta:
model = BookMessage
fields = ["title","author","price","date"]
extra_kwargs = {
"date":{
"write_only":True},
}
def create(self, validated_data):
aid = self.context['id']
validated_data["author_id"] = aid
print(validated_data)
data = BookMessage.objects.create(**validated_data)
return data
def update(self, instance, validated_data):
aid = self.context["id"]
validated_data["author_id"] = aid
instance.title = validated_data.get("title")
instance.price = validated_data.get("price")
instance.date = validated_data.get("date")
instance.author_id = aid
instance.save()
return instance
为了实现取数据时显示作者名称,数据库写入数据时以id形式写入,故序列化器中重写了post及put方式中的save方法。
views.py
from django.shortcuts import render
from rest_framework.views import APIView
from rest_framework.generics import GenericAPIView
from rest_framework.response import Response
from .models import BookMessage
from rest_framework import status
from .serializer import BookSerializer
# Create your views here.
class BookOperation(APIView):
def get(self,