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:类方法内部,闭包 ...
随机推荐
- 程序员必备神器(FastStoneCapture)
工欲善其事,必先利其器. 作为程序员,如果我们不知道如何制作动态图或者快捷录屏.录视频等,会给人一种身怀不技的感觉:好!屁话少说,接下来我会废话连篇的介绍一款神器--------那就是FastSton ...
- JQ ajaxFileUpload的一些问题
1.input之后没法再次获得响应事件,change无效 解决办法,对file这个Input的父级做响应事件. <div class="lineBox lineBox0_24 line ...
- AutoHotKey 用打码的快捷键
本文告诉大家如何使用 AutoHotKey 将 - 键默认输入的时候是下划线,因为使用下划线在写代码的时候是用在私有字段,而 - 很少使用 我打码经常需要使用下划线_而下划线需要按shift+- 两个 ...
- linux PCI 接口
尽管许多计算机用户认为 PCI 是一种电路布线方法, 实际上它是一套完整的规格, 定义 了一个计算机的不同部分应当如何交互. PCI 规范涉及和计算机接口相关的大部分问题. 我们不会在这里涵盖全部; ...
- 北京信息科技大学第十一届程序设计竞赛E-- kotori和素因子(深搜)
链接:https://ac.nowcoder.com/acm/contest/940/E 题目描述 kotori拿到了一些正整数.她决定从每个正整数取出一个素因子.但是,kotori有强迫症,她不允许 ...
- Checkpoint 防火墙修改网卡buffer
近期有一台CP5100频繁丢包,修改网卡buffer步骤如下,默认的网卡buffer为256,最大可以修改为4096,其步骤如下: step1:ssh登录checkpoint 防火墙控制台 step2 ...
- boostrap-非常好用但是容易让人忽略的地方【3】:clearfix
代码 显示结果 代码 结果
- 20191017-5 alpha week 2/2 Scrum立会报告+燃尽图 04
此作业要求参见https://edu.cnblogs.com/campus/nenu/2019fall/homework/9801 小组名称:“组长”组 组长:杨天宇 组员:魏新,罗杨美慧,王歆瑶,徐 ...
- jmeter 5.1版本更新说明
版本5.1 摘要 新的和值得注意的 不兼容的变化 Bug修复 改进 非功能性变化 已知问题和解决方法 谢谢 新的和值得注意的 核心改进 JDBC测试已得到改进,能够设置init SQL语句并添加与不支 ...
- Python 官方团队在打包项目中踩过的坑
花下猫语:这是 packaging 系列的第三篇译文,该系列是全网关于此话题的最详尽(水平也很高)的一个系列.原作者是 Python 官方打包团队成员,是 virtualenv 和 tox 项目的维护 ...