CBV 序列化
一、模型表
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 序列化的更多相关文章
- 前后端分离djangorestframework——序列化与反序列化数据
我们写好后端的代码,要把数据交给前端的展示的,这个数据以什么类型给前端呢?学到这里,我们已经知道这个数据最好是json字符串才行,因为网络间的传输,只认字符串或者二进制,字符串就是我们的数据,二进制就 ...
- python自动化开发-[第二十一天]-form验证,中间件,缓存,信号,admin后台
今日概要: 1.form表单进阶 2.中间件 3.缓存 4.信号 5.admin后台 上节课回顾 FBV,CBV 序列化 - Django内置 - json.dumps(xxx,cls=) Form验 ...
- python自动化开发-[第二十天]-form表单,CBV和FBV,序列化
1.CBV和FBV的用法 2.序列化用法 3.form表单 一.CBV和FBV 1.cbv是 class based view(基于类),fbv是function based view(基于函数) 2 ...
- django基础之FBV与CBV,ajax序列化补充,Form表单
目录: FBV与CBV ajax序列化补充 Form表单(一) 一.FBV与CBV 1.什么是FBV.CBV? django书写view时,支持两种格式写法,FBV(function bases vi ...
- Django drf:cbv源码、resful规范及接口、drf使用、response源码、序列化
一.cbv源码分析 二.resful规范 三.django中写resful的借口 四.drf写resful的借口 五.APIVIew源码分析 六.drf之序列化 一.cbv源码分析 -CBV和FBV ...
- 序列化与反序列化、def的介绍与快速使用、cbv源码分析、APIView与request对象分析
今日内容概要 序列化与反序列化 def介绍和快速使用 cbv源码流程分析 drf之APIView和Request对象分析 内容详细 1.序列化和反序列化 # api接口开发 最核心最常见的一个过程就是 ...
- DRF初识与序列化
一.Django的序列化方法 1.为什么要用序列化组件 做前后端分离的项目,我们前后端数据交互一般都选择JSON,JSON是一个轻量级的数据交互格式.那么我们给前端数据的时候都要转成json格式,那就 ...
- 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:类方法内部,闭包 ...
随机推荐
- H3C ping命令的输出
- 【p082】排座椅
Time Limit: 1 second Memory Limit: 50 MB [问题描述] 上课的时候总有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情.不过,班主任小雪发现了 ...
- CodeForces 906D (欧拉降幂)
Power Tower •题意 求$w_{l}^{w_{l+1}^{w_{l+2}^{w_{l+3}^{w_{l+4}^{w_{l+5}^{...^{w_{r}}}}}}}}$ 对m取模的值 •思路 ...
- 爬虫工程师的unidbg入门教程
现在很多的app使用了so加密,以后会越来越多.爬虫工程师可能会直接逆向app,看java代码,完成java层的算法破解,但是如果遇到so该怎么办呢?可能你会直接破解so,但是真的会有很多爬虫工程师会 ...
- ORACLE禁用和启用外键
禁用外键 select 'alter table '|| t.table_name||' disable constraint '||t.constraint_name||';' from user_ ...
- Windows 服务安装与卸载 (通过 Sc.exe)
1. 安装 新建文本文件,重命名为 ServiceInstall.bat,将 ServiceInstall.bat 的内容替换为: sc create "Verity Platform De ...
- C++Review1_多态和虚函数
继承是实现多态的基础.虚函数是实现多态的方法.虚函数.多态.继承都是紧密相关的概念.而继承是所有概念的基础: 多态:简单来讲就是接口一样,实现多样.多态是指通过基类的指针或者引用,在运行时动态调用实际 ...
- 利用python第三方库提取PDF文件的表格内容
小爬最近接到一个棘手任务:需要提取手机话费电子发票PDF文件中的数据.接到这个任务的第一时间,小爬决定搜集各个地区各个时间段的电子发票文件,看看其中的差异点.粗略统计下来,PDF文件的表格框架是统一的 ...
- MyISAM与InnoDB的索引实现区别
一 MyISAM索引实现 1. 主键索引 MyISAM引擎使用B+树作为索引结果,叶节点的data域存放的是数据记录的地址.下图为MyISAM表的主索引,Col1为主键. 2. 辅助索引 在MyISA ...
- mysql主从之配置验证
实验环境: master 192.168.132.121 主库 slave 192.168.132.122 从库 一 mysql主从复制的配置 1.1 mysql主库给从库复制的权限 mys ...