django序列化

来源:互联网 发布:淘宝主播怎么申请 编辑:程序博客网 时间:2024/05/13 08:59

json序列化  

可以通过模板语言

也可以通过ajax  序列化传送到前端

models内容:

from django.db import models# Create your models here.class UserInfo(models.Model):    username=models.CharField(max_length=32)    password=models.CharField(max_length=64)

urls

urlpatterns = [    url(r'^admin/', admin.site.urls),    url(r'^users.html$',views.users),    url(r'^get_users.html$', views.get_users),


views所做的操作内容:

from app01 import modelsdef users(request):    # user_list=models.UserInfo.objects.all()    # return render(request,'users.html',{'user_list':user_list})    return render(request, 'users.html')def get_users(request):    response = {'status': True, 'data': None, 'msg': None}    try:        # queryset类型[obj,obj]        # django的序列号方法        # user_list = models.UserInfo.objects.all()        # data = serializers.serialize('json', user_list)        # json序列号方法        user_list = models.UserInfo.objects.values('id', 'username')        response['data'] = list(user_list)  # queryset转换为list    except Exception as e:        response['status']=False        response['msg']= str(e)    data = json.dumps(response)    return HttpResponse(data)



页面:  users.html

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>Title</title></head><body>{#    <ul>#}{#        {% for row in user_list %}#}{#            <li>{{ row.username }}</li>#}{##}{#        {% endfor %}#}{#    </ul>#}<ul id="user_list_id"></ul><script src="/static/jquery-3.1.1.js"></script><script>    $(function () {        initData();    });    function initData() {        $.ajax({            url: '/get_users.html',            type: 'GET',            {# 方法一  指定类型#}            dataType: 'JSON',            success: function (arg) {                {# arg = JSON.parse(arg);  方法二 手动转换一下类型#}                if (arg.status){                    $.each(arg.data,function (index,row) {                        console.log(index,row);                        console.log(row.id,row.username);                        //var tag=document.createElement('li');                        var tag='<li>'+row.username+'</li>';                        $('#user_list_id').append(tag);                    })                }else                {                    alert(arg.msg);                }                console.log(arg);            }        })    }</script></body></html>























定制:

2. 序列化
方式一:
user_list = models.UserInfo.objects.all()
data = serializers.serialize("json", user_list)
[
{"model": "app01.userinfo", "pk": 1, "fields": {"username": "\u5174\u666e", "password": "123123"}}, 
{"model": "app01.userinfo", "pk": 2, "fields": {"username": "\u94f6\u79cb\u826f", "password": "666"}}
]

方式二:

user_list = models.UserInfo.objects.values('id','username')
user_list = list(user_list)
data = json.dumps(user_list)
[
{"username": "\u5174\u666e", "id": 1}, 
{"username": "\u94f6\u79cb\u826f", "id": 2}
]

问题:对json.dumps做定制:

import json
from datetime import date
from datetime import datetime


class JsonCustomEncoder(json.JSONEncoder):
def default(self, field):
if isinstance(field, datetime):
return field.strftime('%Y-%m-%d %H:%M:%S')
elif isinstance(field, date):
return field.strftime('%Y-%m-%d')
else:
return json.JSONEncoder.default(self, field)




user_list = [
{'id':1,'name':'alex','ctime': datetime.now()},
{'id':2,'name':'eric','ctime': datetime.now()}
]


data = json.dumps(user_list,cls=JsonCustomEncoder)
print(data)


总结:
- 模板渲染
- Ajax
- json序列化
- 前端:js添加到页面