django前后端分離_02(form的驗證)


django為了方便驗證請求的參數,使用了form模塊,在form中我們可以使用它的基本校驗規則,也可以自定義校驗規則

使用了 模塊需要導入

from django import forms

from django.forms import ValidationError

from django.forms import model_to_dict,ValidationError
from django.http import JsonResponse
from django.shortcuts import render
from django.views import View
from django import forms
from . import models
#cvb方式,用例表

#form django自帶的數據校驗模塊
class CaseForm(forms.Form):
    '''校驗請求參數'''
    title = forms.CharField(max_length=50,min_length=2)
    desc = forms.CharField(max_length=70,required=False)#required=False 默認desc可以為空
    method = forms.IntegerField()
    url = forms.URLField()
    params = forms.CharField(max_length=100)

    #自定義校驗
    #單個參數校驗@1
    # def clean_method(self):
    #     method = self.cleaned_data.get('method')#先校驗上述那些基本的格式,然后在校驗自定義的規則
    #     if method not in (0,1,2,3):
    #         raise ValidationError('method值不對')
    #     return method
    # 單個參數校驗@2
    # def clean_title(self):
    #     title = self.cleaned_data.get('title')
    #     if models.Case.objects.filter(title=title).count()>0:
    #         raise ValidationError('標題重復')
    #     return title
    def clean(self):#多個參數組合校驗
        method = self.cleaned_data.get('method')
        title = self.cleaned_data.get('title')
        if method not in (0,1,2,3) or models.Case.objects.filter(title=title).count()>0:
            raise ValidationError('參數錯誤12313123213')#拋出異常
        return self.cleaned_data

class CaseView(View):
    #增加數據
    def post(self,request):
        form = CaseForm(request.POST)#通過post方法拿到請求的數據
        #開始驗證 form.is_valid() 返回一個bool類型的數據 通過返回True 不通過返回False
        if form.is_valid():
            #如果校驗通過會返回一個字典{'title':xxx,'desc':xxx,'method':xx,'url':xx,'params':xx}
            print(form.cleaned_data)
            models.Case.objects.create(**form.cleaned_data)#字典前面加**轉換為title=xxx,desc=xxxx
            data = {'code': 0, 'msg': '成功'}
        else:
            #form.errors.as_data() 是form自帶的友好提示
            data = {'code': -1, 'msg': str(form.errors.as_data())}
        return JsonResponse(data)
    #查找數據
    def get(self,request):
        case_sets = models.Case.objects.filter(is_delete=False)  # 查詢所有集合
        data = []
        # 把查詢出來的轉換成字典通過model_to_dict方法,並添加進data列表中,最終返回[{'xx':xx},{'xx':xx}]
        for c in case_sets:
            d = model_to_dict(c)
            data.append(d)
        response = {'code': 0, 'msg': '成功', 'data': data}
        return JsonResponse(response, json_dumps_params={'ensure_ascii': False})
    #刪除數據
    def delete(self,request):
        id = request.GET.get('id')
        models.Case.objects.filter(id=id).update(is_delete=True)
        response = {'code': 0, 'msg': '成功'}
        return JsonResponse(response, json_dumps_params={'ensure_ascii': False})

實現原理

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM