想完成restful序列....

需完成如下步骤:

第一步:创建models数据库模型

class Course(models.Model):
    course_name = models.CharField(max_length=32)
    description = models.CharField(max_length=128)

    def __str__(self):
        return self.course_name


class Author(models.Model):
    nid = models.AutoField(primary_key=True)
    name = models.CharField(max_length=32)
    age = models.IntegerField()

    def __str__(self):
        return self.name


class Publish(models.Model):
    nid = models.AutoField(primary_key=True)
    name = models.CharField(max_length=32)
    city = models.CharField(max_length=32)
    email = models.EmailField()

    def __str__(self):
        return self.name


class Book(models.Model):
    nid = models.AutoField(primary_key=True)
    title = models.CharField(max_length=32)
    price = models.DecimalField(max_digits=5, decimal_places=2)
    # 外键字段
    publish = models.ForeignKey(to="Publish", related_name="book", related_query_name="book_query",
                                on_delete=models.CASCADE)
    # 多对多字段
    authors = models.ManyToManyField(to="Author")

第二步:设置访问url(即urls.py文件)

from django.urls import re_path
from xfzapp import views

urlpatterns = [
    re_path(r'books/$', views.BookView.as_view()),
]

第三步:设置视图函数view(即views.py文件)

# 3.1 导入模块
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework.response import Response

'''
导入模块的前提条件是,你已经安装Django_rest_framework
'''
# 3.2 导入Book类,获取queryset
from .models import Book origin_data = Book.objects.all()
# 3.3 导入序列化文件,开始序列化
from .xfz_serializers import BookSerializer

serialized_data = BookSerializer(origin_data, many=True)
# 3.4 将序列化后的数据, 响应给客户端
return Response(serialized_data.data)

views.py文件中的完整代码:

# 第一步:导入模块
from rest_framework.views import APIView
from rest_framework.response import Response
from .models import Book
from .xfz_serializers import BookSerializer


class BookView(APIView):
    def get(self, request):
        # 第二步:获取queryset,<QuerySet [<Book: Book object (1)>, <Book: Book object (2)>, ... ]>
        origin_data = Book.objects.all()
        # 第三步:开始序列化
        serialized_data = BookSerializer(origin_data, many=True)
        # 第四步:将序列化后的数据, 响应给客户端
        return Response(serialized_data.data)

 

第四步:创建序列化类,由于我们这里是把序列化类单独放在一个py文件的, 所以放在了最后面说这个文件.(建议写完models文件就写这个)

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# 1.导入模块
from rest_framework import serializers


# 2.创建一个序列化类,字段类型不一定要跟models的字段一致
class BookSerializer(serializers.Serializer):
    nid = serializers.CharField(max_length=32)
    title = serializers.CharField(max_length=128)
    price = serializers.DecimalField(max_digits=5, decimal_places=2)
    # 3.外键字段, 显示__str__方法的返回值
    publish = serializers.CharField(max_length=32, source="publish.city")

    # 4.多对多字段需要自己手动获取数据,SerializerMethodField()
    authors = serializers.SerializerMethodField()
    def get_authors(self, book_obj):
        author_list = list()

        for author in book_obj.authors.all():
            author_list.append(author.name)

        return author_list

    def create(self, book_obj):
        return book_obj