DjangoRestFramework view.py文件书写流程
首先初始化模型,modules.py定义如下:
1 | # 出版社 |
其次,定义一个获取所有书籍的json输出接口,定义views.py文件如下:
引入所需要的模块
1
2
3
4
5
6
7
8from 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定义书籍序列化类
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定义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)定义url路由
1
path('books', Books.as_view())
依照以上操作,我们运行我们的Django,访问该页面127.0.0.1:8000/books,返回结果如下