中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

威海住房和城鄉(xiāng)建設(shè)局網(wǎng)站首頁搜索引擎營銷簡稱seo

威海住房和城鄉(xiāng)建設(shè)局網(wǎng)站首頁,搜索引擎營銷簡稱seo,wordpress投稿vip,吾愛源碼序列化器允許將諸如查詢集和模型實(shí)例之類的復(fù)雜數(shù)據(jù)轉(zhuǎn)換為原生 Python 數(shù)據(jù)類型,然后可以將它們輕松地呈現(xiàn)為 JSON,XML 或其他內(nèi)容類型。序列化器還提供反序列化,在首次驗(yàn)證傳入數(shù)據(jù)之后,可以將解析的數(shù)據(jù)轉(zhuǎn)換回復(fù)雜類型。 簡單來…

序列化器允許將諸如查詢集和模型實(shí)例之類的復(fù)雜數(shù)據(jù)轉(zhuǎn)換為原生 Python 數(shù)據(jù)類型,然后可以將它們輕松地呈現(xiàn)為 JSON,XML 或其他內(nèi)容類型。序列化器還提供反序列化,在首次驗(yàn)證傳入數(shù)據(jù)之后,可以將解析的數(shù)據(jù)轉(zhuǎn)換回復(fù)雜類型。
簡單來說,服務(wù)器通過api 返回數(shù)據(jù)(json格式),把非json格式轉(zhuǎn)換為json 就是序列化的過程
瀏覽器提交給服務(wù)器端的數(shù)據(jù),服務(wù)端將json 格式轉(zhuǎn)換給非json存儲到數(shù)據(jù)庫,就是反序列化

REST framework 中的序列化類與 Django 的 Form 和 ModelForm 類非常相似。我們提供了一個 Serializer 類,它提供了一種強(qiáng)大的通用方法來控制響應(yīng)的輸出,以及一個 ModelSerializer 類,它為創(chuàng)建處理模型實(shí)例和查詢集的序列化提供了有效的快捷方式。

1、申明序列化類

首先創(chuàng)建一個簡單的對象用于示例:

from datetime import datetime
class Comment(object):def __init__(self, email, content, created=None):self.email = emailself.content = contentself.created = created or datetime.now()
comment = Comment(email='leila@example.com', content='foo bar')

聲明一個序列化類,使用它來序列化和反序列化與 Comment 對象相對應(yīng)的數(shù)據(jù)
聲明一個序列化類看起來非常類似于聲明一個表單:

from rest_framework import serializers
class CommentSerializer(serializers.Serializer):email = serializers.EmailField()content = serializers.CharField(max_length=200)created = serializers.DateTimeField()

2、序列化對象

現(xiàn)在可以使用 CommentSerializer 來序列化評論或評論列表。同樣,使用 Serializer 類看起來很像使用 Form 類。

serializer = CommentSerializer(comment)
serializer.data
# {'email': 'leila@example.com', 'content': 'foo bar', 'created': '2016-01-27T15:17:10.375877'}

此時已經(jīng)將模型實(shí)例轉(zhuǎn)換為 Python 原生數(shù)據(jù)類型。為了完成序列化過程,將數(shù)據(jù)渲染為 json。

from rest_framework.renderers import JSONRenderer
json = JSONRenderer().render(serializer.data)
json
# b'{"email":"leila@example.com","content":"foo bar","created":"2016-01-27T15:17:10.375877"}'

3、反序列化對象

反序列化是相似的。首先我們將一個流解析為 Python 原生數(shù)據(jù)類型…

from django.utils.six import BytesIO
from rest_framework.parsers import JSONParser
stream = BytesIO(json)
data = JSONParser().parse(stream)

然后我們將這些原生數(shù)據(jù)類型恢復(fù)成通過驗(yàn)證的數(shù)據(jù)字典。

serializer = CommentSerializer(data=data)
serializer.is_valid()
# True
serializer.validated_data
# {'content': 'foo bar', 'email': 'leila@example.com', 'created': datetime.datetime(2012, 08, 22, 16, 20, 09, 822243)}

4、保存實(shí)例

如果希望能夠基于驗(yàn)證的數(shù)據(jù)返回完整的對象實(shí)例,則需要實(shí)現(xiàn) .create() 和 .update() 方法中的一個或兩個。例如:

class CommentSerializer(serializers.Serializer):email = serializers.EmailField()content = serializers.CharField(max_length=200)created = serializers.DateTimeField()def create(self, validated_data):return Comment(**validated_data)def update(self, instance, validated_data):instance.email = validated_data.get('email', instance.email)instance.content = validated_data.get('content', instance.content)instance.created = validated_data.get('created', instance.created)return instance

如果對象實(shí)例與 Django 模型相對應(yīng),還需要確保這些方法將對象保存到數(shù)據(jù)庫。如果 Comment 是一個 Django 模型,這些方法可能如下所示:

 def create(self, validated_data):return Comment.objects.create(**validated_data)def update(self, instance, validated_data):instance.email = validated_data.get('email', instance.email)instance.content = validated_data.get('content', instance.content)instance.created = validated_data.get('created', instance.created)instance.save()return instance

現(xiàn)在,當(dāng)反序列化數(shù)據(jù)時,我們可以調(diào)用 .save() 根據(jù)驗(yàn)證的數(shù)據(jù)返回一個對象實(shí)例。

comment = serializer.save()

調(diào)用 .save() 將創(chuàng)建一個新實(shí)例或更新現(xiàn)有實(shí)例,具體取決于在實(shí)例化序列化類時是否傳遞了現(xiàn)有實(shí)例:

# .save() will create a new instance.
serializer = CommentSerializer(data=data)
# .save() will update the existing `comment` instance.
serializer = CommentSerializer(comment, data=data)

.create() 和 .update() 方法都是可選的。您可以都不實(shí)現(xiàn),或者實(shí)現(xiàn)其中的一個或兩個,具體取決于你的序列化類的用例。

將附加屬性傳遞給 .save()

有時你會希望你的視圖代碼能夠在保存實(shí)例的時候注入額外的數(shù)據(jù)。這些附加數(shù)據(jù)可能包含當(dāng)前用戶,當(dāng)前時間或其他任何不屬于請求數(shù)據(jù)的信息。

serializer.save(owner=request.user)

調(diào)用 .create() 或 .update() 時,任何其他關(guān)鍵字參數(shù)都將包含在 validated_data 參數(shù)中。

直接覆蓋 .save()。

在某些情況下,.create() 和 .update() 方法名稱可能沒有意義。例如,在 “聯(lián)系人表單” 中,我們可能不會創(chuàng)建新實(shí)例,而是發(fā)送電子郵件或其他消息。

在這些情況下,可以選擇直接覆蓋 .save(),因?yàn)樗呖勺x性和有意義性。

舉個例子:

class ContactForm(serializers.Serializer):email = serializers.EmailField()message = serializers.CharField()def save(self):email = self.validated_data['email']message = self.validated_data['message']send_email(from=email, message=message)

請注意,在上面的情況下,必須直接訪問 serializer .validated_data 屬性。

5、驗(yàn)證

在反序列化數(shù)據(jù)時,你總是需要在嘗試訪問驗(yàn)證數(shù)據(jù)之前調(diào)用 is_valid(),或者保存對象實(shí)例。如果發(fā)生任何驗(yàn)證錯誤,那么 .errors 屬性將包含一個代表錯誤消息的字典。例如:

serializer = CommentSerializer(data={'email': 'foobar', 'content': 'baz'})
serializer.is_valid()
# False
serializer.errors
# {'email': [u'Enter a valid e-mail address.'], 'created': [u'This field is required.']}

字典中的每個鍵都是字段名稱,值是與該字段相對應(yīng)的錯誤消息(字符串列表)。non_field_errors 鍵也可能存在,并會列出任何常規(guī)驗(yàn)證錯誤??梢允褂?NON_FIELD_ERRORS_KEY (在 settings 文件中設(shè)置)來定制 non_field_errors 關(guān)鍵字的名稱。

反序列化 item 列表時,錯誤將作為代表每個反序列化 item 的字典列表返回。

數(shù)據(jù)驗(yàn)證時拋出異常
.is_valid() 方法帶有一個可選的 raise_exception 標(biāo)志,如果存在驗(yàn)證錯誤,將導(dǎo)致它引發(fā) serializers.ValidationError 異常。
這些異常由 REST framework 提供的默認(rèn)異常處理程序自動處理,并且默認(rèn)情況下將返回 HTTP 400 Bad Request

# Return a 400 response if the data was invalid.
serializer.is_valid(raise_exception=True)

字段級驗(yàn)證
你可以通過向 Serializer 子類添加 .validate_<field_name> 方法來指定自定義字段級驗(yàn)證。這些與 Django 表單上的 .clean_<field_name> 方法類似。
這些方法只有一個參數(shù),就是需要驗(yàn)證的字段值。

您的 validate_<field_name> 方法應(yīng)返回驗(yàn)證值或引發(fā) serializers.ValidationError。

from rest_framework import serializers
class BlogPostSerializer(serializers.Serializer):title = serializers.CharField(max_length=100)content = serializers.CharField()def validate_title(self, value):"""Check that the blog post is about Django."""if 'django' not in value.lower():raise serializers.ValidationError("Blog post is not about Django")return value

對象級驗(yàn)證
如果要對多個字段進(jìn)行其他的驗(yàn)證,請將一個名為 .validate() 的方法添加到您的 Serializer 子類中。這個方法只有一個參數(shù),它是一個字段值(field-value)的字典。如果有必要,它應(yīng)該引發(fā)一個 ValidationError,或者只是返回驗(yàn)證的值。例如:

from rest_framework import serializers
class EventSerializer(serializers.Serializer):description = serializers.CharField(max_length=100)start = serializers.DateTimeField()finish = serializers.DateTimeField()def validate(self, data):"""Check that the start is before the stop."""if data['start'] > data['finish']:raise serializers.ValidationError("finish must occur after start")return data

驗(yàn)證器
序列化器上的各個字段可以包含驗(yàn)證器,方法是在字段實(shí)例上聲明它們,例如:

def multiple_of_ten(value):if value % 10 != 0:raise serializers.ValidationError('Not a multiple of ten')
class GameRecord(serializers.Serializer):score = IntegerField(validators=[multiple_of_ten])...

序列化類還可以包含應(yīng)用于整個字段數(shù)據(jù)集的可重用驗(yàn)證器。這些驗(yàn)證器是通過在內(nèi)部的 Meta 類中聲明它們來包含的,如下所示:

class EventSerializer(serializers.Serializer):name = serializers.CharField()room_number = serializers.IntegerField(choices=[101, 102, 103, 201])date = serializers.DateField()class Meta:# Each room only has one event per day.validators = UniqueTogetherValidator(queryset=Event.objects.all(),fields=['room_number', 'date'])
http://www.risenshineclean.com/news/50850.html

相關(guān)文章:

  • 太原制作網(wǎng)站的公司福建seo學(xué)校
  • 酒業(yè)公司網(wǎng)站模板bilibili官網(wǎng)網(wǎng)頁入口
  • 網(wǎng)站建設(shè)開發(fā)合同指數(shù)是指什么
  • wordpress怎么清緩存優(yōu)化網(wǎng)絡(luò)培訓(xùn)
  • 在線學(xué)做衣服 的網(wǎng)站關(guān)鍵詞優(yōu)化公司排名榜
  • 現(xiàn)在做一個app大概多少錢百度seo技術(shù)
  • 咋制作網(wǎng)站網(wǎng)站怎么優(yōu)化自己免費(fèi)
  • 全屏網(wǎng)站怎么做最新新聞熱點(diǎn)素材
  • 品牌建設(shè)讓知乎關(guān)鍵詞排名優(yōu)化工具
  • 網(wǎng)站底部備案信息seo公司推廣
  • 網(wǎng)站建設(shè)改版農(nóng)大南路網(wǎng)絡(luò)營銷推廣優(yōu)化
  • 網(wǎng)站運(yùn)營的思路適合seo的建站系統(tǒng)
  • 貴陽城鄉(xiāng)建設(shè)網(wǎng)站上海網(wǎng)站排名優(yōu)化
  • 浙江注冊公司網(wǎng)站seo互聯(lián)網(wǎng)營銷培訓(xùn)
  • 成都專業(yè)建站推廣公司自己建網(wǎng)站需要多少錢
  • 免費(fèi)個人網(wǎng)站模板下載google chrome官網(wǎng)入口
  • 建立網(wǎng)站需要多少錢稻挺湖南嵐鴻有名最近有哪些新聞
  • 病毒營銷網(wǎng)站中國seo公司
  • 上海網(wǎng)站建設(shè)設(shè)計搜索引擎優(yōu)化策略
  • 自己怎么做視頻收費(fèi)網(wǎng)站廣告服務(wù)平臺
  • 網(wǎng)站名是什么長沙百度快速排名
  • 網(wǎng)站主辦單位負(fù)責(zé)人最近國際新聞
  • 六安網(wǎng)站推廣獲客app小紅書關(guān)鍵詞排名怎么做
  • 加快推進(jìn)政府網(wǎng)站集約化建設(shè)百度快照下載
  • 網(wǎng)站優(yōu)化公司方案代引流推廣公司
  • 網(wǎng)站開發(fā)過程總結(jié)b站推廣app大全
  • 重慶網(wǎng)站建設(shè) 渝icp網(wǎng)絡(luò)軟文推廣網(wǎng)站
  • 網(wǎng)站左側(cè)懸浮seo sem是指什么意思
  • 汽車行業(yè)網(wǎng)站建設(shè)方案愛站網(wǎng)關(guān)鍵字挖掘
  • 淘寶客可道cms網(wǎng)站建設(shè)重慶seo整站優(yōu)化方案范文