1.解释器组件源码分析

https://www.processon.com/view/link/5ba0a8e7e4b0534c9be0c968

2.基于CBV的接口设计

  1)、django循环queryset对象构造数组套字典方式

  2)、django.serializers.serialize方式

  3)、restframework序列化组件方式

  

###################### 基于CBV的接口设计#######################

# class CourseView(View):
#
# def get(self,request):
#
# course_list=Course.objects.all()
# ret=[]
# for course in course_list:
# ret.append({
# "title":course.title,
# "desc":course.desc,
# })
#
#
# return HttpResponse(json.dumps(ret,ensure_ascii=False)) ###################### 基于DRF的接口设计####################### # from rest_framework.views import APIView
# from rest_framework.response import Response
# from rest_framework.parsers import JSONParser,FormParser,FileUploadParser
# from app01.models import Course
# #
#
# from rest_framework import serializers
# class CourseSerializer(serializers.Serializer):
# title=serializers.CharField(max_length=32)
# desc=serializers.CharField(max_length=32)
#
#
# class CourseView(APIView):
#
# def get(self,request):
# '''
# 查看所有数据
# 方式1:
# ret=[]
# for course in course_list:
# ret.append({
# "title":course.title,
# "desc":course.desc,
# })
#
# json.dumps(ret,ensure_ascii=False)
#
# 方式2:
# from django.core.serializers import serialize # Django的序列化组件
# data=serialize("json",course_list)
# print("data",data)
#
# 方式3:
# restframework序列化组件
# :param request:
# :return:
# '''
#
# course_list=Course.objects.all()
#
# cs=CourseSerializer(course_list,many=True)
# print("====>",cs.data) # 序列化接口
#
# '''
#
# [OrderedDict([('title', 'python'), ('desc', 'python非常好')]), OrderedDict([('title', 'linux'), ('desc', 'linux好')]), OrderedDict([('title', 'go'), ('desc', 'gogogo')])]
#
# '''
#
# return Response(cs.data)
#
#
# def post(self,request):
#
# print(request.data) # 静态方法:解析数据工作
# cs=CourseSerializer(data=request.data)
# if cs.is_valid(): # 校验
#
# # Course.objects.create(**request.data)
#
# return Response(cs.data) # 序列化数据
# else:
# return Response(cs.errors) # 序列化错误信息
# ##########################################################################

基于CBV的接口设计

3.restframework序列化组件

  1.serializers.Serializer    

class BookSerializer(serializers.Serializer):
title = serializers.CharField()
price = serializers.IntegerField()
# publish_email = serializers.CharField(source='publish.email')
# publish_name = serializers.CharField(source='publish.name')
publish = serializers.CharField(source='publish.nid')
authors = serializers.SerializerMethodField() def get_authors(self, obj):
data = []
print(obj.authors.all())
for i in obj.authors.all():
temp = []
temp.append(i.name)
temp.append(i.email)
data.append(temp)
return data

  2.serializers.ModelSerializer

class BookSerializer(serializers.ModelSerializer):
class Meta:
model = Book
fields = "__all__"
# exclude = ["publish"] # publish = serializers.CharField(source='publish.nid')
# authors = serializers.SerializerMethodField()
#
# def get_authors(self, obj):
# data = []
# print(obj.authors.all())
# for i in obj.authors.all():
# temp = []
# temp.append(i.name)
# temp.append(i.email)
# data.append(temp)
# return data class BookView(APIView):
# parser_classes = [FormParser, JSONParser, MultiPartParser] def get(self, request):
book_list = Book.objects.all()
bs = BookSerializer(book_list, many=True)
return response.Response(bs.data) def post(self, request):
serializer = BookSerializer(data=request.data) if serializer.is_valid(): serializer.save()
print(serializer.data) # 必须在save()方法之后
# {'id': 8, 'title': '第10本书', 'price': 12, 'publish': 1, 'authors': [1, 3]}
print(serializer.validated_data)
# OrderedDict([('title', '第10本书'), ('price', 12), ('publish', < Publish: 沙河出版社 >),
# ('authors', [ < Author: 下马哥 >, < Author: eva >])])
return response.Response(serializer.data)
else:
return response.Response(serializer.errors)

python全栈开发day99-DRF序列化组件的更多相关文章

  1. python 全栈开发,Day90(Vue组件,前端开发工具包)

    昨日内容回顾 1. Vue使用 1. 生成Vue实例和DOM中元素绑定 2. app.$el --> 取出该vue实例绑定的DOM标签 3. app.$data --> 取出该vue实例绑 ...

  2. python 全栈开发,Day76(Django组件-cookie,session)

    昨日内容回顾 1 json 轻量级的数据交换格式 在python 序列化方法:json.dumps() 反序列化方法:json.loads() 在JS中: 序列化方法:JSON.stringfy() ...

  3. python全栈开发day72-django之Form组件

    一.ajax 1. 复习JSON 1. JSON是什么? 一种数据格式,和语言无关的数据格式. 2. Python里面转换 1. Python对象 --> 字符串 import json 字符串 ...

  4. python 全栈开发,Day58(bootstrap组件,bootstrap JavaScript 插件,后台模板,图表插件,jQuery插件库,Animate.css,swiper,运行vue项目)

    一.bootstrap组件 无数可复用的组件,包括字体图标.下拉菜单.导航.警告框.弹出框等更多功能. 组件和插件的区别? 插件:一个功能,比如js文件 组件:html css js 组件包含插件 面 ...

  5. python 全栈开发,Day78(Django组件-forms组件)

    一.Django组件-forms组件 forms组件 django中的Form组件有以下几个功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显 ...

  6. python 全栈开发,Day99(作业讲解,DRF版本,DRF分页,DRF序列化进阶)

    昨日内容回顾 1. 为什么要做前后端分离? - 前后端交给不同的人来编写,职责划分明确. - API (IOS,安卓,PC,微信小程序...) - vue.js等框架编写前端时,会比之前写jQuery ...

  7. python全栈开发中级班全程笔记(第二模块、第四章)(常用模块导入)

    python全栈开发笔记第二模块 第四章 :常用模块(第二部分)     一.os 模块的 详解 1.os.getcwd()    :得到当前工作目录,即当前python解释器所在目录路径 impor ...

  8. Python全栈开发【面向对象】

    Python全栈开发[面向对象] 本节内容: 三大编程范式 面向对象设计与面向对象编程 类和对象 静态属性.类方法.静态方法 类组合 继承 多态 封装 三大编程范式 三大编程范式: 1.面向过程编程 ...

  9. Python全栈开发【模块】

    Python全栈开发[模块] 本节内容: 模块介绍 time random os sys json & picle shelve XML hashlib ConfigParser loggin ...

  10. python 全栈开发之路 day1

    python 全栈开发之路 day1   本节内容 计算机发展介绍 计算机硬件组成 计算机基本原理 计算机 计算机(computer)俗称电脑,是一种用于高速计算的电子计算机器,可以进行数值计算,又可 ...

随机推荐

  1. [javascript]XMLHttpRequest GET/SET HTTP头与改变HTTP METHOD示例代码

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  2. vue 安装之路

    vue 来源 1.安装node.js(http://www.runoob.com/nodejs/nodejs-install-setup.html) 2.基于node.js,利用淘宝npm镜像安装相关 ...

  3. Python-面向对象(组合、封装与多态)

    一.组合 什么是组合? 就是一个类的属性 的类型 是另一个自定义类的 类型,也可以说是某一个对象拥有一个属性,该属性的值是另一个类的对象. 通过为某一个对象添加属性(这里的属性是另一个类的对象)的方式 ...

  4. Stetho简化Android调试(一)

    在开发 Android 应用的时候,有时候我们需要查看数据库.SharePreference等.通常的做法是把相关文件pull出来,而前提必须是手机得root.如果没有root,那就只能通过打印或其它 ...

  5. 改造 Android 官方架构组件 ViewModel

    前言 Android 官方架构组件在今年 5 月份 Google I/O 大会上被公布, 直到 11 月份一直都是测试版, 由于工作比较繁忙, 期间我只是看过类似的文章, 但没有在实际项目中使用过, ...

  6. Confluence 6 Home 和其他重要的目录

    Confluence 安装目录 Confluence 安装的目录(Confluence Installation directory)定义的是 Confluence 是在那里进行安装的.这个目录有时候 ...

  7. Confluence 6 附件存储选项

    在早期的 Confluence 版本中,我们允许存储附件到 WebDav 或者 Confluence 数据库中.针对新的 Confluence 安装,我们不再支持这 2 种存储了. 本地文件系统 在默 ...

  8. Confluence 6 配置 MySQL 服务器

    在这一步,你将要配置你的 MySQL 数据库服务器. 注意: 如果你尝试连接你的 Confluence 到一个已经存在的 MySQL 数据库服务器.我们强烈建议你按照下面描述的安装步骤在 MySQL ...

  9. vue 树状图数据的循环 递归循环

    在main.js中注册一个子组件 在父组件中引用 树状图的数据格式 绑定一个数据传入子组件,子组件props接收数据 子组件中循环调用组件,就实现了递归循环

  10. http之cdn介绍

    百度百科:CDN的全称是Content Delivery Network,即内容分发网络.CDN是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡.内容分发.调度等功能 ...