DjangoRestFramework view.py文件书写流程

首先初始化模型,modules.py定义如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 出版社
class Publish(models.Model):
name = models.CharField('出版社名称', max_length=25)
address = models.CharField('地址', max_length=50)
def __str__(self):
return self.name
# 作者
class Authors(models.Model):
name = models.CharField('姓名', max_length=25)
age = models.IntegerField('年龄')
def __str__(self):
return self.name
# 书籍
class Book(models.Model):
name = models.CharField('书籍名', max_length=50)
price = models.DecimalField('价格', max_digits=5, decimal_places=2,)
publish = models.ForeignKey(Publish, related_name='book', on_delete=models.CASCADE)
authors = models.ManyToManyField(Authors, related_name='book')
def __str__(self):
return self.name

其次,定义一个获取所有书籍的json输出接口,定义views.py文件如下:

  1. 引入所需要的模块

    1
    2
    3
    4
    5
    6
    7
    8
    from rest_framework.views import APIView
    # rest_framework序列化模块
    from rest_framework import serializers
    # rest_framework响应模块
    from rest_framework.response import Response

    # 引入书籍模型
    from app.models import Book as BookModel
  2. 定义书籍序列化类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    # 书籍模型序列化类
    class BookSerialize(serializers.Serializer):
    name = serializers.CharField(max_length=25)
    price = serializers.DecimalField(max_digits=5, decimal_places=2)
    # 外键字段,显示模型中定义的__str__方法返回的内容
    publish = serializers.CharField(max_length=50)
    # 获取作者姓名,多对多字段需要自己手动获取数据(必须定义一个get_该字段的方法来获取数据)
    authors = serializers.SerializerMethodField()
    # 获取author相关数据
    def get_authors(self, book_obj):
    authors_data = []
    # 循环读取该书籍的所有作者,将其作者姓名写入数组
    for item in book_obj.authors.all():
    authors_data.append(item.name)
    return authors_data
  3. 定义Books视图类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    # Books视图类
    class Books(APIView):
    def get(self, request):
    # 读取所有书籍
    data = BookModel.objects.all()
    # 使用序列化类序列化书籍相关字段,many代表获取的是多条信息
    serialize_data = BookSerialize(data, many=True)
    # 返回json数据
    return Response(serialize_data.data)
  4. 定义url路由

    1
    path('books', Books.as_view())

依照以上操作,我们运行我们的Django,访问该页面127.0.0.1:8000/books,返回结果如下

1562919409003