设为首页 加入收藏

TOP

Django 系列博客(十六)(三)
2019-01-20 16:08:24 】 浏览:189
Tags:Django 系列 博客 十六
le }}#} {# </table>#} {{ myform.as_p }} <input type="submit" value="提交"> </form>

渲染错误信息功能

前端代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.css">
    <script src="/static/jquery-3.3.1.js"></script>
    <title>注册</title>
</head>
<body>
<div class="row">
    <div class="col-md-6 col-md-offset-3">
        <form action="" method="post" novalidate>
            {% for foo in myform %}
                <p>{{ foo.label }}:{{ foo }} <span class="pull-right">{{ foo.errors.0 }}</span></p>
            {% endfor %}
            <input type="submit" value="提交"><span>{{error_all.0 }}</span>


        </form>
        <hr>

        <form action="" method="post" novalidate>
            <p>用户名:{{ myform.name }} <span>{{ myform.errors.name }}</span></p>
            <p>用户名:{{ myform.pwd }} <span>{{ myform.errors.pwd }}</span></p>
            <p>用户名:{{ myform.email }} <span>{{ myform.errors.email }}</span></p>
            <input type="submit" value="提交">
        </form>


    </div>
</div>

</body>
</html>

后端代码

from app01.MyForm import RegForm


def register(request):
    if request.method == 'GET':
        myform = RegForm()
    else:
        myform = RegForm(request.POST)
        if myform.is_valid():
            # 存数据库,保存这个人
            print(myform.cleaned_data)
        else:
            # 校验不通过,这里面也可能有值
            # 总错误信息{'name':['太长了',],'pwd':['太短了']}
            # print(myform.cleaned_data)
            # 总错误
            # myform.glo_err=myform.errors.get('__all__')
            error_all = myform.errors.get('__all__')
            # print()
            # 每一个的错误信息
            # for item in myform:
            #     # ['太长了',]
            #     # print(item.errors[0])
            #     # print(type(item.errors))
            #     from django.forms.utils import ErrorList
            #     # print(item.errors.as_data())
            #     print(item.errors)
            #     # print(type(item.errors))
    return render(request, 'register.html', locals())

组件的参数设置

class RegForm(forms.Form):
    name = forms.CharField(max_length=8, min_length=3, label='用户名',
                           error_messages={'max_length': '太长了',
                                           'min_length': '太短了',
                                           'required': '该项不能为空'
                                           },
                           widget=widgets.TextInput(attrs={'class': 'form-control'})
                           )
    pwd = forms.CharField(max_length=8, min_length=3, label='密码',
                          error_messages={'max_length': '太长了',
                                          'min_length': '太短了',
                                          'required': '该项不能为空'
                                          },
                          widget=widgets.PasswordInput(attrs={'class': 'form-control'})
                          )
    re_pwd = forms.CharField(max_length=8, min_length=3, label='确认密码',
                          error_messages={'max_length': '太长了',
                                          'min_length': '太短了',
                                          'required': '该项不能为空'
                                          },
                          widget=widgets.PasswordInput(attrs={'class': 'form-control'})
                          )
    email = forms.EmailField(label='邮箱', error_messages={'invalid': '格式不正确',
                                                         'required': '该项不能为空'
                                                         },
                             widget=widgets.EmailInput(attrs={'class': 'form-control'})
                             )

局部钩子

继承自 Form类的校验类,可以对类中的每个字段进行校验,校验通过后的数据会放在 clean_data中,没通过的放在errors中,可以通过字段名取值,那么校验通过的字段如果还需要进行其他的判断,比如是否有敏感词,这些单单依靠字段的校验是完成不了的。所以 Django 提供了局部钩子函数,当每个字段进行校验完成后会自动调用该钩子函数。看源码就很清楚了。

首先,所有的数据校验都是调用了 Form 对象的 is_valid()方法进行的。所以进入is_valid()方法。

self.is_bou

首页 上一页 1 2 3 4 5 下一页 尾页 3/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇python 迭代器协议和生成器 下一篇Centos 5 升级 python 2.4 -> ..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目