想完成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