1. 程式人生 > >django學習之- json序列化

django學習之- json序列化

hid itl utf-8 rip bject json.js inf ack data

序列化操作
- 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>
View Code

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)    
View Code

django學習之- json序列化