• 15_提取表单错误信息


    提取错误信息

    如果验证失败了,那么有一些错误信息是我们需要传给前端的。这时候我们可以通过以下属性来获取:
    1. form.errors: 这个属性获取的错误信息是一个包含html标签的错误信息
    2. ’form.errors.values(): 2. form.errors.get_json_data(): 这个方法获取到的是一个字典类型的错误信息。将某个字段的名字作为key, 错误信息作为值的一个字典 3. form.as_json(): 这个方法是将 form.get_json_data()返回的字典dumpjson` 格式的字符串,方便进行传输
    上述方法获取的字段的错误值,都是一个比较复杂的数据。比如以下:

    {'username': [{'message': 'Enter a valid URL.', 'code': 'invalid'}, {'message': 'Ensure this value has at most 4 characters (it has 22).', 'code': 'max_length'}]}
    

    那么如果我只想把错误信息放在一个列表中,而不要再放在一个字典中。这时候我们可以定义一个方法,把这个数据重新整理一份。实例代码如下:

    from django import forms
    class MyForm(forms.Form):
        username = forms.URLField(max_length=4)
        def get_errors(self):
            errors = self.errors.get_json_data()
            new_errors = {}
            for key,message_dicts in errors.items():
                messages = []
                for message in message_dicts:
                messages.append(message['message'])
                new_errors[key] = messages
            return new_errors
    

    这样就可以把某个字段所有的错误信息直接放在这个列表中.

    # 如注册数据校验
    class MyRegisterView(View):
        """
        register view
        url: /user/register/
        """
        def get(self, request):
            return render(request, 'user/register.html')
    
        def post(self, request):
            # 1. 获取 并校验 数据
            form = RegisterForm(request.POST, request=request)
            if form.is_valid():
                # 2. 校验通过 注册创建用户
                # 2-1 获取需要的数据
                username = form.cleaned_data.get('username')
                mobile = form.cleaned_data.get('mobile')
                password = form.cleaned_data.get('password')
                try:
                    User.objects.create_user(username=username, password=password, mobile=mobile)
                except Exception as e:
                    print('e: {}'.format(e))
                    return json_response(errno=Code.UNKOWNERR, errmsg='注册失败')
                # 3. 返回数据给前端
                return json_response(errmsg='注册成功')
    
            # 数据校验不通过
            error_msg_list = []
            for items in form.errors.values():
                error_msg_list.append(items[0])
            error_msg_str = ''.join(error_msg_list)   # 将错误信息拼接成字符串
            return json_response(errno=Code.PARAMERR, errmsg=error_msg_str)
    
    
    
  • 相关阅读:
    [bzoj1911][Apio2010特别行动队] (动态规划+斜率优化)
    [bzoj1597][usaco2008 mar]土地购买 (动态规划+斜率优化)
    [bzoj1901][zoj2112][Dynamic Rankings] (整体二分+树状数组 or 动态开点线段树 or 主席树)
    整体二分初步
    bzoj[3238][ahoi差异]
    概率dp学习
    poj[2104]K-th Number
    hdu[1711]number sequence
    hdu[2222]keywords search
    poj[1187][Noi 01]陨石的秘密
  • 原文地址:https://www.cnblogs.com/nichengshishaonian/p/11523487.html
Copyright © 2020-2023  润新知