DRFシリアル化インフラストラクチャ

インテグラ単一の変更

ルーティング層、モデル層、ビューのみの層を処理する必要がある、シーケンス層を変更する必要はありません。views.py

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


注:一部の値がTrueに設定されている場合、それはローカルで変更することができ
、1)単一全体の変更を一般的にすることによって、要求を置く:
V2BookModelSerializer(
    インスタンス=オブジェクトが更新される、
    データがデータを更新するために使用されます= 、
    Falseの部分的デフォルト=は、チェックすべてのフィールドに参加しなければならない
通常のパッチリクエストと2)単一のローカル変更、:
V2BookModelSerializer(
    更新されるインスタンス=オブジェクト、
    データ=データを更新するために、
    真部分集合=、しなければなりませんフィールドはオプションフィールドになる
    注:部分集合真の本質が必要= 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次回()
         #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

#キー:ListSerializerとModelSerializer関連がある:
メタクラス#ModelSerializerの- list_serializer_class 
クラスV2BookListSerializer(ListSerializer):
     DEF 更新(自己、例えば、validated_data):
        印刷(インスタンス)   #オブジェクトその更新するために、
        #の印刷を(validated_data )   #更新されたオブジェクトに対応するデータは、
        #1 印刷(self.child)   V2BookModelSerializer - #モデルシリアライゼーションクラスのサービス
        のためのインデックス、OBJ :列挙(インスタンス)
            self.child.update(OBJ、validated_data [インデックス])
        戻りインスタンス
    
元のモデル系列変動クラスの
クラスV2BookModelSerializer(ModelSerializer):
     クラスメタ:
         ... 
        #のグループ変更は、それがカスタムListSerializerを設定する必要があり、グループの更新方法のオーバーライドが変更
        list_serializer_class = V2BookListSerializer
     ...

ビュー層:views.py

クラスV2Book(APIView):
    シングルローカルで変更:データV2 /書籍/(PK)/通過し、オプションのデータフィールドが鍵となる
    #1 ローカルで変更グループ:V2 /書籍/のための
    #の要求データ- [{PK:1 、名前:123}、{PK :. 3 ,.価格:. 7}、{PK :. 7、発行:2}] 
    DEFパッチ(セルフ、要求、*引数、** kwargsから):
        request_data = request.data 
        PK = kwargsから。 (GET PK 

        単一の変更は、データグループの変更は= PKSにフォーマットされている[必要とする対象に、主キー識別子] | request_data = [各オブジェクトに対応する改変するデータ改変】
        IF PK 、でisinstance(request_dataを辞書):   #1 つの修飾された 
            PKS = [PK、] 
            request_data =[request_data、】
         ELIF  ていない PK でisinstance(request_data、リスト):#1 基が修飾された 
            PKS = []
             のために DIC  request_data:  前景のデータを横断[{PK 1、名前: 123}、{PK:3、価格:7 }、{PK:7、発行 :2}]、 辞書取る 
                PK = dic.pop(' PK ' 、なし)を
                 IF PK:
                    pks.append(PK)
                返す応答({
                         ' ステータス':1 "MSG '' データエラー' 
                    })返す応答({
                 ' ステータス':1 ' MSG '' データエラー' 
            })#1 PKSスクリーニングおよびrequest_dataデータ1)PKSではありません削除されたデータと対応するデータのPK PKが除去され、インデックス・ビットに対応するデータはまたrequest_data除去#は2)OBJS合理的PKSを変換さ 
        OBJS = [] 
        new_request_data = []
         のためのインデックス、PK 
        

        
        
        列挙(PKS):
             試してみる#のオブジェクトを格納することが合理的、合理的な対応PKデータ、 
                OBJ = models.Book.objects.get(PK = PK)
                objs.append(OBJ) 
                インデックスデータに対応するには、保存する必要
                new_request_dataを。追記(request_data [インデックス])
             を除くキー:負チュートリアル-誤ったデータに対応するPK、除去request_dataに対応するインデックスデータ
                #1 インデックス= pks.index(PK)
                #1 request_data.pop(インデックス)が
                続行

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

        戻り応答({
             ' ステータス' :0、
             ' MSG '' OK ' ' 結果':serializers.V2BookModelSerializer(book_objs、多く= 真).DATA 
        })

 

おすすめ

転載: www.cnblogs.com/KrisYzy/p/11695314.html