- 正确的情况下,开始处理业务的时候,请求参数一定是合法的。
- 就收到请求后,首先要做的是:1. 用户校验,2. 权限校验,3. 数据完整性校验,4. 数据合法性校验
- 代码示例:
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})
pass
return JsonResponse({'code': '1000', 'msg': 'success'})
def request_decorator(function):
"""
对请求进行判定,筛选,以及返回。
:param func:
:return:
"""
def wrap(*args, **kwargs):
request = args[0]
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