django學習之- json序列化
阿新 • • 發佈:2017-12-22
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"View Codename="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)View Code
django學習之- json序列化