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