django中的参数校验

  1. 正确的情况下,开始处理业务的时候,请求参数一定是合法的。
  2. 就收到请求后,首先要做的是:1. 用户校验,2. 权限校验,3. 数据完整性校验,4. 数据合法性校验
  3. 代码示例:
from id_validator import validator
from django import forms
import json
from django.views import View
from django.http import HttpResponse, JsonResponse
from django.utils.decorators import method_decorator

@method_decorator(request_decorator, name='dispatch')
class TestView1(View):
    def post(self, request):
        # 验证数据完整性和合法性
        request_data, err = test_view_params_check(json.loads(request.body))
        if err:
            return JsonResponse({'code': '1002', 'msg': err})
        # 通过校验,request_data为清洗后的数据
        # 处理业务
        pass
        return JsonResponse({'code': '1000', 'msg': 'success'})

def request_decorator(function):
    """
    对请求进行判定,筛选,以及返回。
    :param func:
    :return:
    """
    def wrap(*args, **kwargs):
        request = args[0]  # 获取request
        method = request.method
        if method != 'POST':
            resp = {'code': '11', 'msg': '服务只支持POST方法,请重试。'}
            return JsonResponse(status=200, data=resp)
        # 在这里进行用户校验,权限校验
        ip=request.META.get('HTTP_X_FORWARDED_FOR') if request.META.get('HTTP_X_FORWARDED_FOR') else request.META.get('REMOTE_ADDR')
        user = request.user
        # 权限校验
        permission_check(user)
        result = function(*args, **kwargs)
        return JsonResponse(status=200, data=result)
    return wrap

def test_view_params_check(params):
    # 验证数据完整性
    form = WhiteListDataFormDefine(params)
    if form.is_valid():
        value_dict = form.cleaned_data
    else:
        return None, form.error_msg
    # 验证数据合法性
    error = check_params(value_dict)
    if error:
        return None, error
    return value_dict, None

class WhiteListDataFormDefine(forms.Form, FormatErrMsg):
    """自定义校验规则"""

    car_number = forms.CharField(max_length=7, min_length=3, label="车牌号")
    car_color = forms.CharField(max_length=5, label='车牌颜色')
    cllx = forms.CharField(max_length=10, label='车辆类型')
    clsbdh = forms.CharField(max_length=20, label='车辆识别代号')
    sfzmhm = forms.CharField(max_length=18, min_length=15, label='驾驶证号')
    sjhm = forms.CharField(max_length=11, min_length=11, label='手机号码')

class CheckFields():
    """检验参数合法性"""

    @staticmethod
    def car_color(car_color):
        """车牌类型"""
        if car_color not in ('01', '02'):
            return '车牌颜色值不对'
        return None

    @staticmethod
    def car_number(car_number):
        """车牌号"""
        compile_str = '^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$'
        res = re.match(compile_str, car_number)
        if not res:
            return '车牌号码格式不对'
        return None

    @staticmethod
    def sfzmhm(sfzmhm):
        """身份证明号码"""
        if not validator.is_valid(sfzmhm):
            return '身份证号校验未通过'
        return None

    @staticmethod
    def sjhm(sjhm):
        """手机号"""
        pass
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值