【问题标题】:Django 2.7 Rest API Validation RequestDjango 2.7 Rest API 验证请求
【发布时间】:2017-01-19 05:11:06
【问题描述】:

我使用 Django 2.7 构建 Rest API 应用程序,并且在验证/清理来自客户端的请求数据以获取详细事务(不保存/更新)时遇到问题。例如请求数据 trx_no 不能少于 5 个字符长度。我应该在哪里创建验证类?我应该在 Model.py 或使用表单还是在序列化程序中进行验证? 这是我的 models.py:

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

这是我的views.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')

【问题讨论】:

    标签: django python-2.7 rest api validation


    【解决方案1】:

    验证逻辑应该在forms.py文件中

    例如

    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
    

    【讨论】:

    • @dennysaputra 你只需要为你的表单调用 isValid() ,clean_fieldname 就会被调用。 form = YourForm(request.POST) form.is_valid()更多详情可以参考official doc
    猜你喜欢
    • 1970-01-01
    • 2021-08-11
    • 1970-01-01
    • 1970-01-01
    • 2013-08-22
    • 2014-06-03
    • 2016-07-01
    • 1970-01-01
    • 2017-05-31
    相关资源
    最近更新 更多