一、模型表

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. [Ctsc2014]图的分割

    [Ctsc2014]图的分割 阅读理解好题 翻译一下: M(C)就是C这个诱导子图最小生成树最大边权 结论: 按照w进行sort,如果满足w<=Ci,Cj表示u,v的连通块的诱导子图 并且Ci! ...

  2. substring和substr的区别和使用

    第一反应是都是截取字符串的方法,好像平常使用的时候也没太注意区分这俩,今天看到正好来区分一下 substring(start,[end]) 如果省略end,那么截取的是从指定位置到末尾 var str ...

  3. TCP&IP基础概念复习

    第一章概述 NII(National Information Infrastructure):国家信息基础设施 GII(Global Information Infrastructure):全球信息基 ...

  4. Kubernetes从私有镜像仓库中拉取镜像

    当我们尝试从私有仓库中拉取镜像时,可能会收到这样提示:requested access to the resource is denied Error response from daemon: pu ...

  5. TCP/IP||动态选路

    1.动态选路 动态选路协议用于路由器之间的通信,当相邻路由器之间进行通信,已告知对方每个路由器当前所连接的网络,就产生了动态选路,在Internet之间采用了许多不同的选路协议,Internet是以一 ...

  6. 换根DP(二次扫描)

    参考来自这里: https://blog.csdn.net/qq_41286356/article/details/94554729 题目在这里 https://ac.nowcoder.com/acm ...

  7. 如何从0到1设计一个MQ消息队列

    消息队列作为系统解耦,流量控制的利器,成为分布式系统核心组件之一. 如果你对消息队列背后的实现原理关注不多,其实了解消息队列背后的实现非常重要. 不仅知其然还要知其所以然,这才是一个优秀的工程师需要具 ...

  8. blackarch 安装指南

    建议直接  www.blackangle.cn/BlackArchGuide.htm v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#de ...

  9. Python中三大框架各自的应用场景(DJango,flask,Tornado)

    django:主要是用来搞快速开发的,他的亮点就是快速开发,节约成本,正常的并发量不过10000,如果要实现高并发的话,就要对django进行二次开发,比如把整个笨重的框架给拆掉,自己写socket实 ...

  10. knn识别简单验证码

    参考 https://www.biaodianfu.com/knn-captcha-recognition.html 内容大致一样,只是根据自己的想法加入了一些改动 KNN(k近邻算法) 算法原理请看 ...