DjangoDRF序列化组件使用
创建一个Django项目,名字:untitled1
创建三张表
from django.db import models
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 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 Book(models.Model):
title = models.CharField(max_length=32)
publishDate = models.DateField()
price = models.DecimalField(max_digits=5, decimal_places=2)
publish = models.ForeignKey(to="Publish", to_field="nid", related_name='books', on_delete=models.CASCADE)
authors = models.ManyToManyField(to="Author")
def __str__(self):
return self.title
#####################################################################################
# 一对多反向查询
# urls.py
from django.urls import path
from bms import views
urlpatterns = [
# 一对多反向查询
path('index', views.PublishView.as_view()),
]
# views.py
class PublishView(APIView):
def get(self, request):
publishes = Publish.objects.all()
serializer_data = PublishSerializer1(publishes, many=True)
return Response(serializer_data.data)
# publish_serializer.py
class PublishSerializer1(serializers.ModelSerializer):
book_list = serializers.SerializerMethodField()
def get_book_list(self, obj):
# obj是序列化模型的对象
# 这是Book类,所以这里obj就是图书对象
print('----->', obj)
books = []
for book in obj.books.all():
books.append(book.title)
return books
class Meta:
model = Publish
fields = ('nid', 'name', 'city', 'email', 'book_list')
#####################################################################################
# 一对多正向查询/多对多正向查询
# urls.py
from django.urls import path
from bms import views
urlpatterns = [
# 一对多反向查询
path('index2', views.PublishView.as_view()),
]
# views.py
class BookView(APIView):
def get(self, request):
books = Book.objects.all()
serializer_data = BookSerializer1(books, many=True)
return Response(serializer_data.data)
# book_serializer.py
from rest_framework import serializers
from bms.models import Book, Publish
class PublishSerializer(serializers.ModelSerializer):
class Meta:
model = Publish
fields = ('nid', 'name', 'city', 'email')
class BookSerializer1(serializers.ModelSerializer):
# 一对多正向查询
publish = PublishSerializer()
# 多对多正向查询
author_list = serializers.SerializerMethodField()
# 请注意,get_必须与字段名称一致,否则会报错。
def get_author_list(self, obj):
# obj是序列化模型类的对象
# 这里是Book类,所以obj就是图书对象
print('----->', obj)
authors = []
for author in obj.authors.all():
authors.append(author.name)
return authors
class Meta:
model = Book
fields = ('title', 'publishDate', 'price', 'publish', 'author_list')
#####################################################################################
# urls.py
from django.urls import path
from bms import views
urlpatterns = [
# 一对多反向查询
path('index0', views.PublishView.as_view()),
]
# views.py
class BookView2(APIView):
def get(self, request):
books = Book.objects.all()
serializer_data = BookSerializer2(books, many=True)
return Response(serializer_data.data)
# book_serializer.py
class BookSerializer2(serializers.Serializer):
title = serializers.CharField(max_length=128)
publishDate = serializers.DateField()
price = serializers.DecimalField(max_digits=5, decimal_places=2)
# 处理一对多字段
publish = serializers.CharField()
publish_title = serializers.CharField(max_length=32, read_only=True, source='publish.name')
publish_email = serializers.CharField(max_length=32, read_only=True, source='publish.email')
# 处理多对多字段
author_list = serializers.SerializerMethodField()
def get_author_list(self, obj):
# obj是序列化模型的对象
# 这是Book类,所以这里obj就是图书对象
print('----->', obj)
authors = []
for author in obj.authors.all():
authors.append(author.name)
return authors
#####################################################################################
# urls.py
from django.urls import path
from bms import views
urlpatterns = [
# 一对多反向查询
path('authors', views.AuthorView1.as_view()),
]
# views.py
class AuthorView1(APIView):
def get(self, request):
authors = Author.objects.all()
serializer_data = AuthorSerializer(authors, many=True)
return Response(serializer_data.data)
# author_serializer.py
from rest_framework import serializers
from bms.models import Author
class AuthorSerializer(serializers.ModelSerializer):
class Meta:
model = Author
fields = '__all__'
DjangoDRF序列化组件使用的更多相关文章
- DjangoRestFramework学习二之序列化组件、视图组件 serializer modelserializer
DjangoRestFramework学习二之序列化组件.视图组件 本节目录 一 序列化组件 二 视图组件 三 xxx 四 xxx 五 xxx 六 xxx 七 xxx 八 xxx 一 序列化组 ...
- cvb源码分析,resful规范,drf,drf序列化组件,95
1 CBV的源码分析 -Class Base View(基于类的视图) -Function Base View(基于函数的视图) -def as_view 类方法 -def view:类方法内部,闭包 ...
- rest-framework之APIView 序列化组件
rest-framework之APIView 一 安装djangorestframework 方式一:pip3 install djangorestframework 方式二:pycharm图形化界面 ...
- drf 之序列化组件
序列化 把Python中对象转换为json格式字符串 反序列化 把json格式转为为Python对象. 用orm查回来的数据都是都是一个一个的对象, 但是前端要的是json格式字符串. 序列化两大功能 ...
- DRF 序列化组件
Serializers 序列化组件 Django的序列化方法 class BooksView(View): def get(self, request): book_list = Book.objec ...
- python全栈开发day99-DRF序列化组件
1.解释器组件源码分析 https://www.processon.com/view/link/5ba0a8e7e4b0534c9be0c968 2.基于CBV的接口设计 1).django循环que ...
- Serializers 序列化组件
Serializers 序列化组件 为什么要用序列化组件 当我们做前后端分离的项目~~我们前后端交互一般都选择JSON数据格式,JSON是一个轻量级的数据交互格式. 那么我们给前端数据的时候都要转 ...
- django rest_framework 序列化组件详解
为什么要用序列化组件 当我们做前后端分离的项目,我们前后端交互一般都选择JSON数据格式,JSON是一个轻量级的数据交互格式. 那么我们给前端数据的时候都要转成json格式,那就需要对我们从数据库拿到 ...
- DRF框架之 serializers 序列化组件
1. 什么是序列化,其实在python中我们就学了序列化工具json工具,就是吧信息存为类字典形式 2. DRF框架自带序列化的工具: serializers 3. DRF框架 serializers ...
随机推荐
- android studio - 导入工程报错[Plugin with id 'com.android.application' not found]
出错现象: 大概意思是找不到:com.android.application 插件,以上现象对于初学者来说会经常碰到,下面分析下产生的原因. 原因分析 首先来看看导入后的工程结构: 对于此工程结构,是 ...
- Form.ShowWithoutActivation 属性
获取一个值,该值指示显示窗口时是否激活它. 命名空间: System.Windows.Forms程序集: System.Windows.Forms(在 System.Windows.Forms.d ...
- java中调用数据库中的存储过程和函数
public static void main(String[] args) { Connection conn =getConnection(url,user, pwd); ...
- tomcat打印GC日志
在catinlin.sh的最上面加上 JAVA_OPTS=" -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Xloggc:/lnmp/tomcat8 ...
- hMailServer之允许用户自己修改密码
使用hMailServer搭建邮件系统,使用webmail实现web收发邮件,但是又个问题是在webmail中用户自己无法修改密码. 可以使用hMailServer自带的PhpWebAdmin来实现让 ...
- 如何在Openwrt上,针对内核创建自定义Patch?
参考资料: 1.http://wiki.openwrt.org/doc/devel/patches?s[]=quilt --- 官方对于如何打Patch的说明 2.http://blog.csdn ...
- Uploadify使用源码
上传图片页面绑定源码如下: $("#uploadify").uploadify({ 'uploader' : basePath+'commons/uploadfiles/uploa ...
- hdu6058 Kanade's sum 区间第k大
/** 题目:Kanade's sum 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6058 题意:给定[1,n]的排列,定义f(l,r,k)表示区间[l ...
- Hadoop项目实战
这个项目是流量经营项目,通过Hadoop的离线数据项目. 运营商通过HTTP日志,分析用户的上网行为数据,进行行为轨迹的增强. HTTP数据格式为: 流程: 系统架构: 技术选型: 这里只针对其中的一 ...
- Servlet 容器对URI的处理
问题 请求到达server以后,server是怎样处理URI请求资源路径的,在与web.xml文件里的映射进行比对时的原则是什么. 方案 针对精确匹配.通配符匹配.后缀匹配三种模式改动web.xml文 ...