国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Django分頁查詢并返回jsons數據(中文亂碼解決方法)

2020-02-15 22:38:08
字體:
來源:轉載
供稿:網友

一、引子

Django 分頁查詢并返回 json ,需要將返回的 queryset 序列化, demo 如下:

# coding=UTF-8import osfrom django.core import serializersfrom django.core.paginator import Paginator, PageNotAnInteger, EmptyPagefrom django.shortcuts import renderfrom django.http import HttpResponsefrom mypage.models import Product# Create your views here.def getAllProducts(request):  products_list = Product.objects.all()  paginator = Paginator(products_list, 10) # Show 10 products per page  page = request.GET.get('page', 0)  try:    products = paginator.page(page)  except PageNotAnInteger:    # If page is not an integer, deliver first page.    products = paginator.page(10)  except EmptyPage:    # If page is out of range (e.g. 9999), deliver last page of results.    products = paginator.page(paginator.num_pages)  json_data = serializers.serialize("json", products, ensure_ascii=False)  return HttpResponse(json_data, content_type='application/json; charset=utf-8')

很容易出現的一個錯誤是中文亂碼,重點在于 json_data = serializers.serialize("json", products, ensure_ascii=False) 中第三個參數。

二、Serialize----序列化django對象

官方文檔原文: https://docs.djangoproject.com/en/2.1/topics/serialization/

django的序列化框架提供了一個把django對象轉換成其他格式的機制,通常這些其他的格式都是基于文本的并且用于通過一個管道發送django對象,但一個序列器是可能處理任何一個格式的(基于文本或者不是)

django的序列化類位于django.core下面的serializers文件夾里面,base.py文件里面定義了序列器和反序列器的基類以及一些異常, init .py文件定義了如何根據格式來選擇對應的序列器等內容,我們一起來看看吧

init.py和base.py文件的函數原型如下圖

def serialize(format, queryset, **options):"""Serialize a queryset (or any iterator that returns database objects) usinga certain serializer."""s = get_serializer(format)()s.serialize(queryset, **options)return s.getvalue()
class Serializer(object):  """  Abstract serializer base class.  """  # Indicates if the implemented serializer is only available for  # internal Django use.  internal_use_only = False  def serialize(self, queryset, **options):

那下面我們開始正式講解django的序列化操作了

序列化數據

在最高層的api,序列化數據是非常容易的操作,看上面的函數可知,serialize函數接受一個格式和queryset,返回序列化后的數據:

簡單的寫法:

from django.core import serializersdata = serializers.serialize("xml", SomeModel.objects.all())

復雜的寫法:

XMLSerializer = serializers.get_serializer("xml")xml_serializer = XMLSerializer()xml_serializer.serialize(queryset)data = xml_serializer.getvalue()            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 明光市| 上饶县| 湘乡市| 油尖旺区| 隆回县| 缙云县| 永修县| 东兰县| 盐城市| 平罗县| 厦门市| 三台县| 甘德县| 清徐县| 仙游县| 扎鲁特旗| 越西县| 玉龙| 北辰区| 延川县| 衡山县| 买车| 安塞县| 镶黄旗| 疏附县| 惠州市| 新竹县| 潼南县| 扎鲁特旗| 盈江县| 鲁甸县| 阜新| 额敏县| 鱼台县| 蒲城县| 邓州市| 阳原县| 扶沟县| 平罗县| 宝山区| 浦县|