一、模型表

from django.db import models

# Create your models here.

class Publish(models.Model):
name = models.CharField(max_length=32)
addr = models.CharField(max_length=128) def __str__(self):
return self.name class Book(models.Model):
title = models.CharField(max_length=16)
price = models.DecimalField(max_digits=4, decimal_places=2)
publisher = models.ForeignKey(to="Publish", on_delete=models.CASCADE)
authors = models.ManyToManyField(to="Author") def __str__(self):
return self.title class Author(models.Model):
name = models.CharField(max_length=8)
email = models.CharField(max_length=36) def __str__(self):
return self.name

二、序列化

1、json 强转QuerySet->list

class TestView(View):
def get(self, request):
print(request.GET)
return render(request, "test.html")
# return HttpResponse("get") def post(self, request):
import json
publish_list = list(Publish.objects.all().values("name", "addr"))
return HttpResponse(json.dumps(publish_list, ensure_ascii=False))

2、json 构建新的

from django.shortcuts import render, HttpResponse
from django.views import View
from CBV.models import Publish, Book, Author
from rest_framework import serializers # Create your views here. class PublishSer(serializers.Serializer):
name = serializers.CharField()
addr = serializers.CharField() class TestView(View):
def get(self, request):
print(request.GET)
return render(request, "test.html")
# return HttpResponse("get") def post(self, request):
publish_list = Publish.objects.all()
temp = []
for publish in publish_list:
temp.append({
"name": publish.name,
"addr": publish.addr,
})
print(temp)
return HttpResponse(temp)
# 结果:{'name': '北京出版社', 'addr': '北京'}{'name': '南京出版社', 'addr': '南京'}

优化

from django.shortcuts import render, HttpResponse
from django.views import View
from CBV.models import Publish, Book, Author
from rest_framework import serializers
from django.forms import model_to_dict
# Create your views here. class PublishSer(serializers.Serializer):
name = serializers.CharField()
addr = serializers.CharField() class TestView(View):
def get(self, request):
print(request.GET)
return render(request, "test.html")
# return HttpResponse("get") def post(self, request):
publish_list = Publish.objects.all()
temp = []
for publish in publish_list:
temp.append(model_to_dict(publish))
print(temp)
return HttpResponse(temp)
# 结果:{'name': '北京出版社', 'addr': '北京'}{'name': '南京出版社', 'addr': '南京'}

注意:from djang.forms import model_to_dict

3、Django序列化

class TestView(View):
def get(self, request):
print(request.GET)
return render(request, "test.html")
# return HttpResponse("get") def post(self, request):
# 方法3
from django.core import serializers
publish_list = Publish.objects.all()
print(publish_list)
# serialize里面添加的是queryset
publish_json = serializers.serialize('json', publish_list)
return HttpResponse(publish_json)
# 结果: [{"model": "CBV.publish", "pk": 1, "fields": {"name": "\u5317\u4eac\u51fa\u7248\u793e", "addr": "\u5317\u4eac"}}, {"model": "CBV.publish", "pk": 2, "fields": {"name": "\u5357\u4eac\u51fa\u7248\u793e", "addr": "\u5357\u4eac"}}]

4、rest_framwork

from django.shortcuts import render, HttpResponse
from django.views import View
from CBV.models import Publish, Book, Author
from rest_framework import serializers # Create your views here. class PublishSer(serializers.Serializer):
name = serializers.CharField()
addr = serializers.CharField() class TestView(View):
def get(self, request):
print(request.GET)
return render(request, "test.html")
# return HttpResponse("get") def post(self, request):
publish_list = Publish.objects.all()
ret = PublishSer(publish_list, many=True)
return HttpResponse(ret.data)
# 结果:OrderedDict([('name', '北京出版社'), ('addr', '北京')])OrderedDict([('name', '南京出版社'), ('addr', '南京')])

注意:若序列化的是一个obj,那么many=False(默认),list many=True

三、request

A、Django 原生的request

浏览器 ------------> 服务器

浏览器发送请求到服务器

1、POST

POST的Request Heads 的 Content-Type: application/x-www-form-urlencoded

只有contenttype 是 urlencode时,才会转化成QueryDict

2、body

直接捕获请求的content,如:b'{\n\t"name":"tom",\n\t"age":18\n}'

B、rest_framework 的request

1、data

获取POST任意contenttype的数据,并反序列化

2、other

request._request.GET 也可以 request.GET

CBV 序列化的更多相关文章

  1. 前后端分离djangorestframework——序列化与反序列化数据

    我们写好后端的代码,要把数据交给前端的展示的,这个数据以什么类型给前端呢?学到这里,我们已经知道这个数据最好是json字符串才行,因为网络间的传输,只认字符串或者二进制,字符串就是我们的数据,二进制就 ...

  2. python自动化开发-[第二十一天]-form验证,中间件,缓存,信号,admin后台

    今日概要: 1.form表单进阶 2.中间件 3.缓存 4.信号 5.admin后台 上节课回顾 FBV,CBV 序列化 - Django内置 - json.dumps(xxx,cls=) Form验 ...

  3. python自动化开发-[第二十天]-form表单,CBV和FBV,序列化

    1.CBV和FBV的用法 2.序列化用法 3.form表单 一.CBV和FBV 1.cbv是 class based view(基于类),fbv是function based view(基于函数) 2 ...

  4. django基础之FBV与CBV,ajax序列化补充,Form表单

    目录: FBV与CBV ajax序列化补充 Form表单(一) 一.FBV与CBV 1.什么是FBV.CBV? django书写view时,支持两种格式写法,FBV(function bases vi ...

  5. Django drf:cbv源码、resful规范及接口、drf使用、response源码、序列化

    一.cbv源码分析 二.resful规范 三.django中写resful的借口 四.drf写resful的借口 五.APIVIew源码分析 六.drf之序列化 一.cbv源码分析 -CBV和FBV ...

  6. 序列化与反序列化、def的介绍与快速使用、cbv源码分析、APIView与request对象分析

    今日内容概要 序列化与反序列化 def介绍和快速使用 cbv源码流程分析 drf之APIView和Request对象分析 内容详细 1.序列化和反序列化 # api接口开发 最核心最常见的一个过程就是 ...

  7. DRF初识与序列化

    一.Django的序列化方法 1.为什么要用序列化组件 做前后端分离的项目,我们前后端数据交互一般都选择JSON,JSON是一个轻量级的数据交互格式.那么我们给前端数据的时候都要转成json格式,那就 ...

  8. DjangoRestFramework学习二之序列化组件、视图组件 serializer modelserializer

      DjangoRestFramework学习二之序列化组件.视图组件   本节目录 一 序列化组件 二 视图组件 三 xxx 四 xxx 五 xxx 六 xxx 七 xxx 八 xxx 一 序列化组 ...

  9. cvb源码分析,resful规范,drf,drf序列化组件,95

    1 CBV的源码分析 -Class Base View(基于类的视图) -Function Base View(基于函数的视图) -def as_view 类方法 -def view:类方法内部,闭包 ...

随机推荐

  1. java笔试题及其答案

    1:下列哪个工具可以编译源文件(A) A:javac B:jdb C:javadoc D:junit 2:String b = new String("1"+"2&quo ...

  2. 机器学习——集成学习之Stacking

    摘自: https://zhuanlan.zhihu.com/p/27689464 Stacking方法是指训练一个模型用于组合其他各个模型.首先我们先训练多个不同的模型,然后把之前训练的各个模型的输 ...

  3. vue-cli 初始化 -4058 error

    如上图 原因:安装初始化时没有管理员权限 解决:进入目录删除node_modules,进入命令提示符以管理员身份重新运行: npm install

  4. JRoll 2 适用于移动开发滚动(滑动)——轻量级插件

    JRoll,一款能滚起上万条数据,具有滑动加速.回弹.缩放.滚动条.滑动事件等功能,兼容CommonJS/AMD/CMD模块规范,开源,免费的轻量级html5滚动插件. 官网:http://www.c ...

  5. 牛客多校第三场 F Planting Trees

    牛客多校第三场 F Planting Trees 题意: 求矩阵内最大值减最小值大于k的最大子矩阵的面积 题解: 矩阵压缩的技巧 因为对于我们有用的信息只有这个矩阵内的最大值和最小值 所以我们可以将一 ...

  6. Maven工程

    maven:父子工程 1,父工程并没有实质性的内容,所有的jar包都在里面,也就是说只需要管理jar包即可,不参与任务方法逻辑 2,在父工程中拥有很多的子模块,每一个子模块都代表了不用的包如(pack ...

  7. C# 为什么说事件是一种特殊的委托

    很多人说C#的事件是一种特殊的委托,其实并不是,这是对事件的一种误解 C#  事件模型的五个组成部分 1.事件的拥有者 2.事件成员(事件的本身) 3.事件响应者 4.事件处理器:本质上是一种回调方法 ...

  8. 大学最新毕业论文参考文献,包含java,jsp,mysql,Android,sql,PHP

    每当毕业论文写到最后需要参考文献时,往往是很令人头疼的,因为有的老师对参考文献的要求是很多的,比如需要国内的和国外的,时间必须是近三年的,满足XXX要求的文献至少需要三篇以上等等.今天我就来给大家整理 ...

  9. __FILE__,__LINE__,__DATE__,__TIME__,__FUNCTION__的使用

    C/C++ 有5个常用的预定义宏,可以当作变量直接使用 __FILE__,__FUNCTION __,__LINE__,__DATE__,__TIME__. 注意是两个下划线. 其含义如下: __FI ...

  10. $loj530\ [LibreOJ\ \beta\ Round \#5]$ 最小倍数 数论

    正解:数论 解题报告: 传送门$QwQ$! 不想做题,来水点儿简单点的$QwQ$. 一个显然的点在于可以直接对不同质因子分别算$n_{min}$最后取$max$. 这个正确性还是蛮显然的?因为只要有$ ...