2017-01-19 10 views
0

私はDjango 2.7を使用して、Rest APIアプリケーションを構築し、クライアントからの要求データの検証/クリーンアップに問題があり、詳細トランザクション(Not Save/Update)を取得します。たとえば、要求データtrx_noは、5文字以上の長さでなければなりません。私は作成しなければならない検証クラスはどこですか? Model.pyで検証するか、フォームを使用するかシリアライザで行うべきですか?Django 2.7 Rest API Validation Request

class mst_trx(models.Model): 
    trx_no = models.CharField(max_length=20,primary_key=True) 

はここに私のviews.pyです: はここに私のmodels.pyだ

class views_index(APIView): 

def post(self,request): 
    action = request.POST['action'] 

    if action == 'detail' : 
     resp = detail.as_view()(request) 


class detail(APIView): 
    def dispatch(self,request): 

    ##I want to validate first before get data 
    try: 
     detail = mst_trx.objects.select_related().get(pk=request.POST['trx_no']) 
    except mst_trx.DoesNotExist: 
     raise Http404("Transaction does not exist") 
    else: 
     serializer = TrxDetailSerializer(detail) 
     return serializer.data 

そして、ここに私のserializer.pyです:

class TrxDetailSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = mst_trx 
     fields = ('trx_no') 

答えて

1

検証ロジックべきforms.pyファイル

012にある

def clean_columnname(self): 
    columnname = self.cleaned_data['columnname'] 
    if len(columnname) < 1: 
     raise ValidationError('Please add some content ...') 
    elif len(columnname) > 500000: 
     raise ValidationError('Too many characters ...') 
    return columnname 
+0

ビューからどのように呼び出すことができますか? thx –

+0

@dennysaputraフォームのisValid()を呼び出すだけで、 'clean_fieldname'が呼び出されます。 'form = YourForm(request.POST) form.is_valid()' 詳細については、[official doc](https://docs.djangoproject.com/en/1.10/ref/forms/validation/)を参照してください。 ) – emme