django序列化

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 models


def 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添加到页面

猜你喜欢

转载自blog.csdn.net/wuxingpu5/article/details/78786353