Django實用技巧 序列化與反序列化

2021-09-19 17:17:31 字數 3146 閱讀 6991

1

.在views.pyh中

from django.core.serializers import serialize, deserialize

defget_user

(request)

: users = user.objects.

all(

) context = serialize(

'json'

, users, fields=

('name'

,'age'))

#fields為要序列化的字段

return jsonresponse(context, safe=

false

)# 將列表轉換成json響應物件,需設定safe=false

2.在前端js中先將收到的資料轉換為json格式,再迴圈取值

$.ajax(

, datatype:

'json'

,async

: false,

success: function (data))}

})

2.1 在models.py中,有兩張**user和iphone(一對一)

from django.db import models

# create your models here.

class

user

(models.model)

: ***_choice =((

1,'man'),

(2,'woman'),

) name = models.charfield(

'姓名'

, max_length=20,

) age = models.integerfield(

'年齡'

) *** = models.smallintegerfield(

'性別'

, choices=***_choice, default=1)

@property

def***_choice

(self)

:for ***_choice in self.***_choice:

if self.*** in ***_choice:

return ***_choice

class

meta

: db_table =

'user'

verbose_name =

'使用者表'

verbose_name_plural = verbose_name

def__str__

(self)

:return self.name

class

iphone

(models.model)

: user = models.onetoonefield(user, verbose_name=

'使用者'

) phone_num = models.charfield(

'**'

, max_length=20)

class

meta

: db_table =

'iphone'

verbose_name =

'**表'

verbose_name_plural = verbose_name

def__str__

(self)

:return

%(self.user.name, self.phone_num )

2.2 在models.py同一資料夾下新建serializer.py 寫入

from rest_framework import serializers

#該類用於將user類進行序列化

class

userserializer

(serializers.serializer)

: name = serializers.charfield(max_length=20)

age = serializers.integerfield(

)# 該類用於將iphone類序列化

class

iponeserializer

(serializers.serializer)

: phone_num = serializers.charfield(max_length=20)

# 欄位和model中iphone一一對應,不需要序列化的字段可以不寫

user = serializers.serializermethodfield(

)# 一對一外來鍵

defget_user

(self, obj)

:# 外來鍵對應的方法,獲取對應關聯user的name欄位

return obj.user.name

在views.py中,改寫如下

from rest_framework.response import response

from rest_framework.views import apiview

from user.models import iphone

from

.serializer import iponeserializer

class

phoneview

(apiview)

:# 父類由view改為apiview

defget

(self, request)

: phone = iphone.objects.

all(

) context = iponeserializer(phone, many=

true

)return response(context.data)

# 使用rest_framework.response.response代替httpresponse類

前端獲取到的資料如下:

[

, ,

]

待續.

..

Django序列化與反序列化

新建乙個模型類 class userinfo models.model name models.charfield max length 20 password models.charfield max length 11 addkey models.foreignkey addressinfo c...

序列化與反序列化的簡便實用封裝 續

之前寫過一篇有關.net中序列化與反序列化的文章,之後又幾次用到。但是當時沒有將其整個 放在我的部落格中,後來朋友認為這個 使用隨方便但是希望看到原始碼,而自己又不知道這個是怎麼實現的,希望看到原始碼。下面我就把這個序列化與凡序列化的原始碼放在部落格裡,滿足大家要求。很多朋友認為這麼靈活的介面是不是...

django的序列化

關於django的序列化主要應用在將資料庫中檢索的資料返回給客戶端使用者,特別的ajax請求一般返回的json格式 兩種方法 缺點就是只能應用於物件 ret models.book.objects.filter con print ret queryset,物件 就是上面是列表 from djang...