對於ajax來說,只能接收字串,那麼我們在後台的關鍵問題是,如何才能將我們要傳入的資料序列化,使之成為ajax可以接收的資料型別呢?json模組是乙個序列化的辦法,然而json只能序列化python的三大資料型別,元組,列表,字典,對於其他的資料型別,json並不能為我們序列化,那麼我們應該怎麼辦呢?
針對form元件來說,無非就是向後端傳入2種資料,form類和error資訊,form類不必多說,然而error資訊是乙個物件,並不屬於三大資料型別,那麼我們能否用json進行序列化,向後端傳送呢?答案是可以的,因為obj.errors在django中已經為我們設定好了幾種轉換形式。
我們列印obj.errors的型別可以得到如下結果
我們追溯這個errordict這個類,
class errordict(dict):
我們可以看到,這個類是繼承於dict的(也就是字典),所以說,我們的obj.errors本質上也是乙個字典型別,再往下看:
def as_data(self):
return
def get_json_data(self, escape_html=false):
return
def as_json(self, escape_html=false):
return json.dumps(self.get_json_data(escape_html))
def as_ul(self):
if not self:
return ''
return format_html(
'',format_html_join('', '{}{}', self.items())
)def as_text(self):
output =
for field, errors in self.items():
return '\n'.join(output)
def __str__(self):
return self.as_ul()
在原始碼中,這個類會自動給我們進行轉換,將這個error當作其他型別進行reuturn,在__str__方法中,預設給我們返回的是作為
標籤進行返回的,這就解釋了,為什麼之前我們在前端頁面中呼叫}時,返回的是一串
標籤。所以我們可以直接用json序列化我們這個obj.errors。
2.django內建了乙個模組,可以序列化queryset物件,我們用json模組並不能直接序列化queryset物件,這時候就要用到這個模組了。
from django.core import serializers
用到下面這個方法:
def serialize(format, queryset, **options):
"""serialize a queryset (or any iterator that returns database objects) using
a certain serializer.
"""s = get_serializer(format)()
s.serialize(queryset, **options)
return s.getvalue()
我們需要傳入需要序列化的資料型別,還有物件:
res = serializers.serialize('json',queryset)
這樣就可以轉換為json物件了
當然如果不知道這個模組,還有乙個簡單的辦法進行序列化,我們可以直接將queryset物件轉化那位列表:
list(queryset)
然後用json.dumps序列化這個列表,傳送給前端之後,效果和上面的時一樣的。 序列化問題
package cn.edu360 import j a.io.created by zx on 2017 6 25.class maptask extends serializable def m2 line string array string object sertask created b...
序列化(序列化)
原書上翻譯為序列化,msdn翻譯為序列化 作用 當需要儲存,或者網路傳輸 remoting時,資料 物件或值 需要序列化 類似於打包傳輸檔案。system.serializableattribute 序列化是指儲存和獲取磁碟檔案 記憶體或其他地方中的物件。在序列化時,所有的例項資料都儲存到儲存介質上...
序列化(模型序列化 序列化巢狀)
from rest framework import serializers from meituan.models import merchant,class merchantserializer serializers.modelserializer class meta model merch...