10の大規模な要求の直列化メソッドDRFジャンゴ



##全体の単一変更する

ルーティング層、モデル層、変更が必要でない層の配列を、ちょうど層のビューを処理する必要がありますviews.py

`のPythonを
" 『』
1)について説明するため、単一の全体を変更するために変更されたデータの受信を提供するために、その後。 、データに割り当てられた「配列クラスのオブジェクト」をインスタンス化するときに検証されるべきデータは、データを検証する必要がある
2)変性、それは明らかに「クラスオブジェクトのシリアル化の」オブジェクト・クラスのモデル、およびインスタンスを変更する必要があります、インスタンスに割り当てる
。「クラスオブジェクトのシリアル化」の例では、デフォルトのパラメータがFalseの部分であるため、3)一体的修飾は、すべての検証ルールが必要としている= Trueのフィールドは、提供されなければならない


部分の値がTrueに設定されている場合は、:NOTEローカルで変更することができるである
1)一般的に置く要求で、単一の全体を変更するには:
V2BookModelSerializer(
更新されるインスタンス=オブジェクト、
データ=データ更新のための
部分的なデフォルト= Falseの、すべてのフィールドに参加しなければならないチェック

2)シングル局所:一般的にパッチリクエストによって、修飾
V2BookModelSerializer(
更新すべきインスタンス=オブジェクト、
データを更新するデータ=、
部分集合= Trueの場合、必要なフィールドはオプションのフィールドであるなる

真の本質は、フィールド必要= Trueの検証ルールが失敗することです部分集合
「」 "
` ``

`` `パイソン
V2Bookクラス(APIView):
シングル全体的な変化:データV2 /書籍/(PK)/パスが辞書に対応するモデル名である{|価格|公開|著者は}
DEF、(要求を自己のPUT、引数*、** kwargsから):
request_data request.data =
PK = kwargs.get( 'PK')
old_book_obj = models.Book.objects.filter(PK = PK)1次回()
目的:クラスにデータ系列の数を確認します対処するために-みましょうシリアライズデシリアライズロールプレイングクラス、検証が成功した後、あなたはストレージに置く助けるためにクラスのシーケンス
book_ser = serializers.V2BookModelSerializer(= old_book_objインスタンスは、データ= request_data、部分= False)が
book_ser.is_valid(RAISE_EXCEPTION =真)
#チェックが更新データが完了し、渡さ:ターゲットを更新する、新しいデータを更新するために使用される
)(book_obj = book_ser.saveを

レスポンス({返す
「ステータス」:0、
「MSG」:「OK」
'結果':serializers.V2BookModelSerializer(book_obj).DATA
})
`` `



##を一体の単一局所変更と

#####層列:serializers.py

` Pythonの
#キー:ListSerializerはModelSerializerに関連付けられています:
メタクラスの#ModelSerializer - list_serializer_classの
クラスV2BookListSerializer(ListSerializer):
DEF更新(自己、例えば、validated_data):
その更新する#印刷(インスタンス)#オブジェクト
#プリントを(validated_data)#更新されたオブジェクトに対応するデータがある
#プリント(self.child)#モデルシリアライゼーションクラスサービス- V2BookModelSerializer
インデックスの、OBJ列挙に(例えば):
self.child.update(OBJ、validated_data [インデックス])
を返すインスタンス

#オリジナルモデルシリアライゼーションクラスの変更
V2BookModelSerializerクラス(ModelSerializer):
クラスのメタ- :
#...
#グループの変更は、それがカスタムListSerializerを設定する必要があり、グループの更新方法のオーバーライドは変更
list_serializer_class = V2BookListSerializer
#...
`` `

ビュー:#####ビュー層を。 PY

`Pythonの
クラスV2Book(APIView):
ローカルで変更単一:データV2 /書籍/(PK)/渡し、オプションのデータフィールドはキーである
。#ローカル変性基:V2 /書籍/ため
#要求データ- [{PK :. 1、名前:123}、{PK :. 3 ,.価格:. 7}、{PK :. 7、発行:2}]
DEFパッチ(セルフ、要求、*引数、** kwargsから):
request_data =リクエスト。データ
PK = kwargs.get(「PK」)

単一の変更、グループのデータを変更するPKS = [必要としている被験体を同定するための主キー]にフォーマットされ| request_data = [変更に対応するデータを変更する各オブジェクト]
PK IFをそして、でisinstance(request_data、辞書): #の変更シングル
PKS = [PK、]
request_data = [request_data、】
ELIF PKとでisinstanceない(request_data、リスト):#基が修飾
PKS = []
DICためrequest_dataに#前景のデータを横断[{PK 1、名前: 123}、 {PK:3、価格:7 }、{PK:7、発行:2}]、 辞書取る
PK = dic.pop( 'PK'、なし)を
PK IF:
pks.append(PK)
他は:
応答を返します({
[ステータス] :. 1、
'MSG': 'データエラー'
})
他:
応答({戻り
'ステータス' :. 1を、
'MSG': 'データエラー'
})

request_dataデータフィルタリングと#PKS、
#1)は、対応するデータが削除されていないとデータPK、PK PKS除去され、request_dataも除去インデックスビットに対応するデータ
#2)合理的PKSを変換さOBJS
OBJS = []
new_request_data = []
のインデックスのための、列挙(PKS)におけるPK:
トライ:
#のPKデータを、対応する合理的な、オブジェクトを格納するための合理的な
OBJ = models.Book.objects.get(PK = PK)
objs.append(OBJ)
データを保存する必要がインデックスに対応する#
new_request_data.append(request_data [インデックス])
を除く:
#キー:負チュートリアル-誤りデータに対応するPK、request_data削除インデックスに対応するデータ
#インデックス= pks.index( PK)
#1 request_data.pop(インデックス)
続行

book_ser = serializers.V2BookModelSerializer(例えば= OBJS、データ= new_request_data、部分=真、多く= TRUE)
book_ser.is_valid(RAISE_EXCEPTION = TRUE)
book_objs = book_ser.save()

戻り応答({
'ステータス':0、
'MSG' : 'OK'、
'結果':serializers.V2BookModelSerializer(book_objs、多くの=真).dataセクション
})
`` `









おすすめ

転載: www.cnblogs.com/Sunbreaker/p/11695619.html