Django form 校验数据-前后端分离

对于views中的逻辑,比如在post请求添加数据时,后端会做一些校验。

这时不需要在views的函数或者类中写太多的if判断,django提供了form 这个校验工具

可以实现对一些字段的基本校验和自定义某些字段的校验方法

1,form

1 from django.core.exceptions import ValidationError
2 # 导入django中的异常信息
 1 from django import forms
 2 class CaseForm(forms.Form):
 3     # 这个form用来校验添加用例时请求的参数是否合法,就不用在view里面写if判断了
 4     title=forms.CharField(max_length=50,min_length=2)
 5     desc=forms.CharField(required=False)
 6     # required=false 表示 这个参数不 必传
 7     url=forms.URLField()
 8     params=forms.CharField(max_length=100)
 9     method=forms.IntegerField()
10     def clean_method(self):
11         # 除了上述的一些校验之外,还需要对单个某个字段进行校验,可以写一个函数。必须以clean开头
12         method=self.cleaned_data.get('method')
13         # 先从form的clean data中拿到 method
14         if method not in (0,1,2,3):
15             raise ValidationError('method值不对')
16         # 抛出django中的异常: 校验异常,程序停止运行
17         return method
18     def clean_title(self):
19         title=self.cleaned_data.get('title')
20         if models.Case.objects.filter(title=title).count()>0:
21             # 校验是否存在,需要从数据库里面查一下才知道
22             raise ValidationError('用例标题已经存在')
23         return title
24     def clean(self):
25     # 当需要同时校验多个字段时,可以用这个函数
26         pass
27         # title=
28         # method=

2,cvb class的写法

 1 class CaseView(View):
 2     # 添加了form校验
 3     # cvb的方式统一实现测试用例的增删改查
 4     def post(self,request):
 5        form=CaseForm(request.POST)
 6        # 实例化form,传入 request.POST
 7        # 数据从form里面获取,不需要写post.get了
 8        if form.is_valid():
 9            # 这里form 校验成功或失败,返回true或false
10             models.Case.objects.create(**form.cleaned_data)
11            # cleaned_data 是一个字典
12            # 字典的拆包:title=title,desc=desc...
13             data = {'code': 0, 'msg': '成功'}
14        else:
15            print(form.errors.as_data())
16            # 在pycharm里面打印form校验失败的错误信息
17            data={'code':-1,'msg':'失败'}
18        return JsonResponse(data, json_dumps_params={'ensure_ascii': False})
19     def delete(self,request):
20         id=request.GET.get('id')
21         models.Case.objects.filter(id=id).update(is_delete=True)
22         data = {'code': 0, 'msg': '成功'}
23         return JsonResponse(data, json_dumps_params={'ensure_ascii': False})
24     def put(self,request):
25         pass
26     def get(self,request):
27         case_sets = models.Case.objects.filter(is_delete=False)
28         data = []
29         for c in case_sets:
30             # 查询结果为一个包含model对象的列表 循环该列表获取到每一个Model对象
31             case = model_to_dict(c)
32             # 把Model对象转换成字典
33             data.append(case)
34             # 把这些字典添加一个list中
35         response = {'code': 0, 'msg': '成功', 'data': data}
36         return JsonResponse(response, json_dumps_params={'ensure_ascii': False})

猜你喜欢

转载自www.cnblogs.com/beautyl/p/12743557.html
今日推荐