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

Posted beautyl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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})

 

以上是关于Django form 校验数据-前后端分离的主要内容,如果未能解决你的问题,请参考以下文章

Django之forms组件使用

Django form组件 与 cookie/session

Django之form组件!

前后端分离之后端代码实现获取数据库数据——django+mysql+vue+element

前后端分离之后端代码实现获取数据库数据——django+mysql+vue+element

django前后端分离与不分离概念