查看源码可以知道,APIView是继承的django的View类
同时,APIView重写了dispatch的方法等,做了许多的封装
现在,先用APIView写一个get接口
先创建一个models
class Author(models.Model):
GENDER_CHOICES = ((1,'男'),(0,'女'))
name = models.CharField('作者名字',max_length=16)
gender = models.SmallIntegerField('作者性别',choices=GENDER_CHOICES,default=1)
age = models.SmallIntegerField('作者年龄',default=20,null=True,blank=True)
class Publish(models.Model):
time = models.DateTimeField('出版时间',auto_now_add=True)
company = models.CharField('出版社',max_length=32,default='中国发展出版社')
count = models.IntegerField('出版数量',default=1000)
def __str__(self):
return self.company
class Book(models.Model):
title = models.CharField('书名',max_length=32)
price = models.IntegerField('价格',default=100)
publish = models.ForeignKey(Publish,null=True,blank=True)
author = models.ManyToManyField(Author)
然后编写serialize选择返回的数据
from rest_framework import serializers
class BookSerialize(serializers.Serializer):
title = serializers.CharField(max_length=32)
price = serializers.IntegerField()
publish = serializers.CharField()
author = serializers.SerializerMethodField()
def get_author(self,book_obj):
author_list = list()
for author in book_obj.author.all():
author_list.append(author.name)
return author_list
这里还是有点讲究的
publish = serializers.CharField(max_length=32,source=Publish.time)
首先,外键关联中可以使用source参数,选择哪一个字段进行返回
author = serializers.SerializerMethodField()
def get_author(self,book_obj):
…
这里是多对多关联查询数据的固定写法,大家记住就好
然后开始在编写接口
from rest_framework.response import Response
from rest_framework.views import APIView
from API.models import Book
from API.serializers import BookSerialize
class BookView(APIView):
def get(self,request):
book = Book.objects.all()
serialized_data = BookSerialize(book,many=True)
return Response(serialized_data.data)
请求:http://127.0.0.1:8000/api/books/
获得数据:
get接口请求就到这里,下次进行post请求接口设计
APIView的五种请求我会用五篇文章分别来讲
后面的高级用法,大多都是基于APIView优化简化的封装
只要能熟悉APIView的用法,对于后面使用mixins和viewsets,
哪怕封装到只有两三行代码,我们也能做到心中有数,他的底层在
做什么事情,我们需要他的哪些属性与方法