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)    

时间: 2024-10-09 19:59:40

django学习之- json序列化的相关文章

Python学习之json序列化

一.什么是序列化 在我们存储数据或者网络传输数据的时候,需要对我们的对象进行处理,把对象处理成方便存储和传输的数据格式.这个过程叫序列化,不同的序列化结果也不同,但目的是一样的,都是为了存储和传输 在Python中三种序列化的方案: pickle,可以将我们Python中任意数据类型转化为bytes并写入到文件中.同样也可以把文件中写好的bytes转换回到我们Python的数据-这个过程被称为反序列化. shelve简单另类的一种序列化方案.有点类似于Redis,可以作为一种小型的数据库来使用.

Json序列化

最近在学习FyiReporting的源码,参考FyiReporting的报表对象定义,结合自己在工作中开发报表的应用场景,自己设计了一套报表对象定义,实现在报表设计器中报表对象的修改,通过序列化成Json对象来达到存储报表对象,相对于FyiReporting报表直接对报表定义的XML操作省去编写大量直接解析XML文档的方法,可能会带来点效率损失.本文主要目的在总结自己在序列化对象的时候对类信息标记常用用法,不在于对FyiReporting做过多探讨.首先自己写的Json序列化操作的类: clas

django 学习之DRF (二)

Django学习之DRF02 Serializer序列化器之反序列化操作    1.调?序列化器进?验证        0.准备序列化器            class BookInfoSerializer(serializers.Serializer):            """图书数据序列化器"""                id = serializers.IntegerField(label= 'ID', read_only=

DjangoRestFramework学习二之序列化组件、视图组件

目录 DjangoRestFramework学习二之序列化组件.视图组件 一 序列化组件 二 视图组件(Mixin混合类) DjangoRestFramework学习二之序列化组件.视图组件 本节目录 一 序列化组件 首先按照restful规范咱们创建一些api接口,按照下面这些形式写吧: Courses --- GET ---> 查看数据----->返回所有数据列表[{},{},] Courses--- POST --->添加数据 -----> 返回添加的数据{ } course

python例子-Django之传递json到js脚本中。

一.有两种方法传递sjon到页面中,一种是ajax使用,另一种是直接渲染在页面中: views.py #coding:utf-8 from django.shortcuts import render import json # Create your views here. def addjson(request): list_ = ['list集合','渲染Json到模板'] dict_ = {'site':'字典地址','author':'自学者'} return render(reque

JS学习笔记-JSON

JSON(JavaScriptObject Notation)-JS对象表示法,是JavaScript的一个严格子集,它是一种开发式和基于文本的数据交换格式,因此JSON并不是JS独有,其他很多语言也可以对JSON进行解析和序列化. 特点: 1.轻量级-易于阅读和编写,同时易于及其解析和生成 2.可表示类型: (1)简单值:字符串.数值.布尔值.null,不支持特殊值JS中的undefined (2)对象 { "user" : "Admin", "age&

wp8.1 Study11:APP里文件读写和使用XML和Json序列化

一.文件读写 1.基本操作(使用FileIO API) 这个方法在上一个stduy已经学过,那么贴出来复习下,代码如下: private async void writeTextToLocalStorageFile(string filename, string text) { var fold = Windows.Storage.ApplicationData.Current.LocalFolder;//打开文件夹 StorageFile file = await fold.CreateFil

C#JSON序列化与反序列化

原文:C#JSON序列化与反序列化 windows phone学习也有一段时间了,想要做一个新闻客户端练练手,于是就在网上找看有没有接口之类.在天狗播客找到了热点热词新闻资讯API开放接口,接口提供的是JSON格式的数据,由于之前没用过JSON,于是就在网上各种查.技术讨论群上各种问...... 废话不多说了,下面把我收获分享出来.望像我一样的小白少走弯路. 一个实体类 public class NewsModel { public string Title { get; set; } publ

ios网络学习------5 json格式数据的请求处理

JSON正逐步取代XML,成为网络数据的通用格式. 从ios5开始,使用NSJSONSerialization对JSON解析.还有第三方库,比如SBJson, JSONKit, TouchJson等.从性能上说,NSJSONSerizlization最好,JSONKit其次,SBJson使用较为广泛. 加载json文件: #pragma mark 加载json - (void)loadJson { NSLog(@"load json"); //从web服务器加载数据 NSString