2017-05-20 4 views
0

JSONをAJAXのdjangoビューに送信しています。 JSONは次のようになります。djangoでjsonオブジェクトを検証する方法

{ 
    "code":"9910203040", // required 
    "name":"Abc", // required 
    "payments":[ 
     { 
     "amount":300, // required 
     "name":"efg", // required, 
     "type": 2 // can be empty 
     }, 
     { 
     "amount":100, 
     "name":"pqr", 
     "type": 3 
     } 
    ] 
} 

支払いリストのサイズは任意です。これをDjangoでどのように検証できますか?これを検証するためにDjangoフォームを使用することは可能ですか?それがSpringの場合、私はRequestクラスを作成し、フィールドにアノテーションを使用しますが、Djangoでこれを行う方法を理解することはできません。

答えて

3

をあなたはzaphod100.10 @で述べたように、要求データを検証するために、Djangoの残りのフレームワークを使用することができます

@api_view(['POST']) 
def my_view(request): 
    payments = request.data.pop('payments', []) 
    # validate the main object 
    form = MyForm(request.data) 
    if form.is_valid(): 
     obj = form.save() 
    else: 
     raise APIException(form.errors) 
    for pdata in payments: 
     form = PaymentForm(pdata) 
     if form.is_valid(): 
      # your code 
     else: 
      raise APIException(form.errors) 
    return Response() 

を、ここ

は、シリアライザあなたです検証に使用できます。

from rest_framework import serializers 

class PaymentSerializer(serializers.Serializer): 
    amount = serializers.IntegerField(required=True, min_value=0, null=True) 
    name = serializers.CharField(required=True, max_length=128) 
    type = serializers.IntegerField(required=True, min_value=0) 

class ValidateFormSerializer(serializers.Serializer): 
    code = serializers.CharField(required=True, max_length=32) 
    name = serializers.CharField(required=True, max_length=128) 
    payments = serializers.ListField(child=PaymentSerializer) 

ビューセクションで検証することです。 -

import ValidateFormSerializer 

# add this snippet in your view section 
valid_ser = ValidateFormSerializer(data=request.data) 
if valid_ser.is_valid(): 
     post_data = valid_ser.validated_data 
else: 
     print(valid_ser.errors) 

問題を解決するのに十分であれば教えてください。

+0

私は自分のプロジェクトにdjango restフレームワークを使用していません。代替はありますか? – Nayan

+0

https://docs.djangoproject.com/en/1.11/ref/forms/validation/をチェックすると、Django Restフレームワークを使用しないという特別な理由はありますか? – tom

+0

実際にはありません。私は、上記のような複雑なJSONリクエストを受け付ける単一のビュー関数を持っています。他のすべてのビューはプレーンフォームの提出です。私は知っているだけ興味があるのは、django組み込みapiでこれを行うエレガントな方法です。 – Nayan

0

あなたはdjango rest framework [1]を使うことができます。これはjsonリクエストを処理するのに非常に適しています。

データの検証には、シリアライザまたはdjangoフォームを使用できます。フォーム使用

:[1] http://www.django-rest-framework.org/

+0

を使用して任意の助けが必要な場合は、私に教えてください? – Nayan

+0

リストをループして各オブジェクトを検証できます。どのように答えを表示するかを編集してみましょう。 –

0

jsonを検証するにはいくつかの方法があります。私は、以下のリストになります。

  1. Marshmallow
  2. Schema Validation

あなたは私がオブジェクトのリストを検証することができ、フォームクラスを記述することができますどのようにこれらの

関連する問題