一、模型表

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. H3C ping命令的输出

  2. 【p082】排座椅

    Time Limit: 1 second Memory Limit: 50 MB [问题描述] 上课的时候总有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情.不过,班主任小雪发现了 ...

  3. CodeForces 906D (欧拉降幂)

    Power Tower •题意 求$w_{l}^{w_{l+1}^{w_{l+2}^{w_{l+3}^{w_{l+4}^{w_{l+5}^{...^{w_{r}}}}}}}}$ 对m取模的值 •思路 ...

  4. 爬虫工程师的unidbg入门教程

    现在很多的app使用了so加密,以后会越来越多.爬虫工程师可能会直接逆向app,看java代码,完成java层的算法破解,但是如果遇到so该怎么办呢?可能你会直接破解so,但是真的会有很多爬虫工程师会 ...

  5. ORACLE禁用和启用外键

    禁用外键 select 'alter table '|| t.table_name||' disable constraint '||t.constraint_name||';' from user_ ...

  6. Windows 服务安装与卸载 (通过 Sc.exe)

    1. 安装 新建文本文件,重命名为 ServiceInstall.bat,将 ServiceInstall.bat 的内容替换为: sc create "Verity Platform De ...

  7. C++Review1_多态和虚函数

    继承是实现多态的基础.虚函数是实现多态的方法.虚函数.多态.继承都是紧密相关的概念.而继承是所有概念的基础: 多态:简单来讲就是接口一样,实现多样.多态是指通过基类的指针或者引用,在运行时动态调用实际 ...

  8. 利用python第三方库提取PDF文件的表格内容

    小爬最近接到一个棘手任务:需要提取手机话费电子发票PDF文件中的数据.接到这个任务的第一时间,小爬决定搜集各个地区各个时间段的电子发票文件,看看其中的差异点.粗略统计下来,PDF文件的表格框架是统一的 ...

  9. MyISAM与InnoDB的索引实现区别

    一 MyISAM索引实现 1. 主键索引 MyISAM引擎使用B+树作为索引结果,叶节点的data域存放的是数据记录的地址.下图为MyISAM表的主索引,Col1为主键. 2. 辅助索引 在MyISA ...

  10. mysql主从之配置验证

    实验环境: master  192.168.132.121 主库 slave     192.168.132.122 从库 一 mysql主从复制的配置 1.1 mysql主库给从库复制的权限 mys ...