django学习之- json序列化
序列化操作
- Errordict
- 自定义Encoder
- django的模块可以直接序列化
第一种:
from django.core import serializers # 通过这个模块对queryset对象可以直接序列化
ret = models.tb.objects.all()
data = serializers.serialize("json",ret) #这里指定将ret序列化为json
第二种:
ret = models.tb.objects.values('id','name')
v = list(ret)
json.dumps(v)
这样不可以对时间序列化,如果要序列化时间,序号使用json.dumps(v,cls=JsonCustomEncoder(说明这个需要自定制))
实例:通过ajax提交前端表单数据到后台,后台通过form表单进行验证,如果有错误,通过重写类进行一次json序列化返回给前台
html代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>login</title>
</head>
<body>
<form id="loginform">
{% csrf_token %}
<input type="text" name="username" />
<input type="password" name="pwd" />
<a id="sub">提交</a>
</form>
<script src="/static/jquery-1.12.4.min.js"></script>
<script>
$(function () {
$('#sub').click(function () {
$.ajax({
url:'/app04/login',
type:'POST',
data:$('#loginform').serialize(),
success:function (data) {
console.log(data);
arg = JSON.parse(data)
},
error:function () {
console.log(data)
}
})
})
}
)
</script>
</body>
</html>
python代码
from django.shortcuts import render,HttpResponse
import json
from django import forms
from django.forms import fields,widgets
class logform(forms.Form):
username = fields.CharField()
pwd = fields.CharField(
max_length=64,
min_length=12
) from django.core.exceptions import ValidationError
class JsonCustomEncoder(json.JSONEncoder):
'''重写此类,可以解决以下出现的2次序列化的问题,通过这个类可以一次性序列化'''
def default(self, field):
if isinstance(field,ValidationError):
return {'code':field.code,'messages':field.messages}
else:
return json.JSONEncoder.default(self,field) def login(request):
if request.method == 'GET':
return render(request,'app04/login.html')
if request.method == 'POST':
ret = {'status':True,'error':None,'data':None}
out = logform(request.POST)
if out.is_valid():
print(out.cleaned_data)
else:
ret['error'] = out.errors.as_data()
print(ret)
result = json.dumps(ret,cls=JsonCustomEncoder)
return HttpResponse(result)
django学习之- json序列化的更多相关文章
- Python学习之json序列化
一.什么是序列化 在我们存储数据或者网络传输数据的时候,需要对我们的对象进行处理,把对象处理成方便存储和传输的数据格式.这个过程叫序列化,不同的序列化结果也不同,但目的是一样的,都是为了存储和传输 在 ...
- django学习-16.返回给前端页面数据为json数据类型的3种方案
目录结构 1.前言 2.JsonResponse类的源码简单分析 2.1.JsonResponse类的源码如下所示 2.2.JsonResponse类的构造函数里的每个入参的大概含义和作用 3.[方案 ...
- ajax发送json格式与文件数据、django自带的序列化器(了解)
上期内容回顾 聚合查询和分组查询 # 聚合查询 max min sum avg count # 查询关键字:aggregate from django.db.models import Max, Mi ...
- python及Django的json序列化
JSON是一种文本序列化格式(它输出的是unicode文件,大多数时候会被编码为utf-8),人们很容易进行阅读和编写.python自带的dumps方法很有用,能很容易将字典dict类型数据转化为js ...
- Django开发之Datetime类型JSON序列化时报错
前提回顾 在进行django开发view视图时,如果数据库字段是 datetime类型,在JSON序列化返回时,会出现异常 异常现象 TypeError: Object of type datetim ...
- WebApi2官网学习记录---JSON与XML的序列化
JSON序列化: WebAPI的默认序列库使用的是Json.NET,可以在Globally中配置使用DataContractJsonSerializer 进行序列化 protected void Ap ...
- Python学习笔记十:json序列化,软件结构目录规范,ATM作业讲解,import本质论
json序列化 将系统的某个状态保存为字符串(挂起),序列化. import json json.dumps():序列化 json.loads():反序列化 简单类型数据处理 import pickl ...
- .NET C# Json序列化与反序列化——Newtonsoft.Json学习笔记
Newtonsoft.Json,一款.NET中开源的Json序列化和反序列化类库(介绍及下载地址:http://json.codeplex.com/). /// <summary> ...
- DjangoRestFramework学习二之序列化组件、视图组件 serializer modelserializer
DjangoRestFramework学习二之序列化组件.视图组件 本节目录 一 序列化组件 二 视图组件 三 xxx 四 xxx 五 xxx 六 xxx 七 xxx 八 xxx 一 序列化组 ...
随机推荐
- IOS颜色块设置
+ (UIImage *)imageWithColor:(UIColor *)color { CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f); UIG ...
- 无法登录phpmyadmin,报1130错误
分析过程及解决方案: mysql的1130错误是远程连接的用户无远程权限问题导致.解决方案:在本机登入mysql后,更改 “mysql” 数据库里的 “user” 表里的 “host” 项,从”loc ...
- Java练习题02
问题: 编程求一个整数数组的最大值.最小值.平均值和所有元素的和. 代码: public class Page99{ public static void main(String args[] ...
- pocket API学习笔记
最近安装了pocket离线阅读软件. 为了收藏需要的URL,每次都要打开浏览器.然后按google工具条上的pocket+. 网页多的时候,这个过程就非常缓慢. 根据pocket网站的API介绍,我可 ...
- Tomcat和搜索引擎网络爬虫的攻防
不知道广大程序员朋友们注意到一个现象么?使用百度是无法搜索到淘宝网的网页.为什么会造成这种现象?这就要从网络爬虫说起了. 咱们程序员假如自己搭设个人网站,在上面分享少量自己的技术文章,面临的一个重要问 ...
- fork后子进程从哪里开始执行
子进程和父进程都从调用fork函数的下一条语句开始执行
- js 数组过滤 filter
let res = this.list.filter(item => routeEqual(this.currentRouteObj, item) || item.name === this.$ ...
- 有n个整数,使其前面各数顺序向后移n-m个位置,最后m个数变成最前面的m个数
题目:有n个整数,使其前面各数顺序向后移n-m个位置,最后m个数变成最前面的m个数 public class 第三十六题数组向后移m个位置 { public static void main(Stri ...
- oracle插入多表(insert all/first)
1.建测试表 CREATE TABLE EDW_INT ( AGMT_NO VARCHAR2(40 BYTE) NOT NULL, AG ...
- Jvm:性能调优监控工具
现实企业级Java开发中,有时候我们会碰到下面这些问题: OutOfMemoryError,内存不足 内存泄露 线程死锁 锁争用(Lock Contention) Java进程消耗CPU过高 .... ...