Django2 序列化(json + xml)

第一步:创建json 序列化工具类:JSONUtil.py

import json
from django.core.serializers import serialize, deserialize
from django.db import models
from django.http import JsonResponse


# json 序列化
def json_to_list(json):
    if json[0] == '[':
        deserializedObjectList = deserialize('json', json)
    else:
        deserializedObjectList = deserialize('json', '[' + json + ']')
    list = []
    for deserializedObject in deserializedObjectList:
        list.append(deserializedObject.object)
    return list


# 序列化
def to_json(obj):
    if isinstance(obj, models.Model):
        obj = [obj]  # 因为serialize只支持可迭代对象,比如querySet对象
    data = serialize("json", obj)
    return data


# 该方法没有做严格的验证,只支持dict,models.Model,models.QuerySet,可以根据需要自行扩展
def render_json(data, dict_key='data', **response_kwargs):
    if isinstance(data, dict):
        return JsonResponse(data)
    data = to_json(data)
    if 'safe' in response_kwargs and response_kwargs['safe'] is False:
        pass
    else:
        data = {dict_key: data}  # 默认必须传递字典数据
    if isinstance(data, str):  # 由于非字典类型的数据会被当做字符串处理,即返回结果两边都有引号,所以此处将其转换为对象,否则ajax调用时不方便处理
        data = json.loads(data)
    return JsonResponse(data, **response_kwargs)

第二步:创建XML 序列化工具类:XMLUtil.py

# -*- coding=utf-8 -*-
from django.core import serializers
from django.db import models
from django.db.models.query import QuerySet
from django.http import HttpResponse


def render_xml(data):
    data = to_xml(data)
    response = HttpResponse(data)
    response['Content-Type'] = 'application/xml'
    return response


# 序列化
def to_xml(data):
    if isinstance(data, models.Model):
        data = [data]  # 因为serialize只支持可迭代对象,比如querySet对象
    elif isinstance(data, QuerySet):
        data = data
    else:
        pass
    data = serializers.serialize("xml", data)
    return data


# 反序列化
def xml_to_list(xml):
    deserializedObjectList = serializers.deserialize("xml", xml)
    list = []
    for deserializedObject in deserializedObjectList:
        list.append(deserializedObject.object)
    return list

视图函数编写:

# json 序列化
def json(request):
    book_list = Books.objects.all()
    return JSONUtil.render_json(book_list, safe=False)


# xml 序列化
def xml(request):
    book_list = Books.objects.all()
    return XMLUtil.render_xml(book_list)

路由函数:

from django.conf.urls import url
from . import views

urlpatterns = [
    url('create/', views.create, name='create'),
    url('read', views.read, name='read'),
    url('update/', views.update, name='update'),
    url('delete/', views.delete, name='delete'),
    url('search', views.search, name='search'),
    url('json/', views.json),
    url('xml/', views.xml),
]

效果展示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值