django restframework APIView怎么写接口?get接口请求

18 篇文章 0 订阅
16 篇文章 0 订阅

查看源码可以知道,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,
哪怕封装到只有两三行代码,我们也能做到心中有数,他的底层在
做什么事情,我们需要他的哪些属性与方法

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值