zoukankan      html  css  js  c++  java
  • forms 组件的功能和使用

    forms组件
    先自己实现注册功能,并且对用户输入的信息加限制条件
    如果用户输入的信息不符合条件,前端展示报错信息

    注册示例:
    1.前端渲染标签获取用户输入 >>> 前端渲染标签
    2.后端获取用户输入,进行数据校验 >>> 数据校验
    3.校验过后产生的提示信息返回给前端 >>> 展示校验信息

    数据校验:
    前端后端都必须做数据校验,前端不做问题不大,后端必须要做!(防爬虫!!!)


    forms组件就能帮我们完成上面的三步:
    1.生成前端html代码
    2.校验数据
    3.展示校验信息

    forms组件的使用
    1.简单的form组件校验数据
    校验数据
    1.得写一个forms校验的类
    from django import forms
    class RegForm(forms.Form):
    # forms组件中定义的字段,默认都是必须传值的
    name = forms.CharField(max_length=6)
    pwd = forms.CharField(max_length=8,min_length=3)
    email = forms.EmailField()
    2.实例化RegForm传值
    # 注意传入的字典的key必须跟类里面的变量名一致,校验的数据可以多传,但是不能少传
    res = views.RegForm({'name':'dsb','pwd':'123','email':'123@qq.com'})
    3.数据是否合法
    res.is_valid() # 如果数据全部校验通过才为True否则均为False
    4.查看校验通过的数据
    res.cleaned_data # 会将校验通过的数据都放入cleaned_data中
    5.查看校验失败的数据
    res.errors # 会将校验失败的数据的提示信息都放入errors中
    """
    {
    'name': ['Ensure this value has at most 6 characters (it has 7).'],
    'pwd': ['Ensure this value has at least 3 characters (it has 2).']
    }
    """
    渲染标签
    form组件值渲染获取用户输入(或选择的...只要是用户操作都算)的标签
    提交按钮需要我们自己手动写

    三种方式:
    1.{{ form_obj.as_p }}
    2.{{ form_obj.name.label }}{{ form_obj.name }}
    3.{% for foo in form_obj %}
    <p>{{ foo.label }}{{ foo }}</p>
    {% endfor %}

    展示报错信息
    <form action="" method="post" novalidate>
    {% for foo in form_obj %}
    <p>
    {{ foo.label }}{{ foo }}
    <span>{{ foo.errors.0 }}</span>
    </p>
    {% endfor %}
    <input type="submit">
    </form>

    局部钩子与全局钩子
    from django.core.exceptions import ValidationError
    # 局部钩子
    def clean_name(self):
    name = self.cleaned_data.get('name')
    if '666' in name:
    # 局部钩子中可以手动添加报错信息
    self.add_error('name','光喊666是不行的,得有操作!')
    # 也可以主动抛出异常
    # raise ValidationError('光喊666是不行的,得有操作!')
    # 拿出来校验的数据必须返回回去
    return name

    # 全局钩子
    def clean(self):
    pwd = self.cleaned_data.get('pwd')
    confirm_pwd = self.cleaned_data.get('confirm_pwd')
    if pwd == confirm_pwd:
    # 校验过后要把cleaned_data再返回出来
    return self.cleaned_data
    else:
    # 跟局部钩子不同,需要手动将报错信息加入到errors里面
    self.add_error('confirm_pwd', '两次密码不一致')
    """
    发现新大陆,局部和全局添加报错信息,都可以通过self.add_error('字段','提示信息')
    局部钩子中还可以通过抛出异常的方式提示校验信息
    """


    from app01 import models
    def reg3(request):
    # 实例化一个form对象
    form_obj = RegForm()
    if request.method == 'POST':
    print(request.POST)
    # 直接丢给form组件需要注意的前端的input name属性必须跟form里面字段的名一致
    form_obj = RegForm(request.POST)
    if form_obj.is_valid():
    models.User.objects.create(**form_obj.cleaned_data)
    return HttpResponse('ok')
    return render(request, 'reg2.html', locals())
    总结:forms组件可以实现三大功能,其实它的这些功能都是给我的models.py里面的一张张模型表服务的


    forms组件其他标签渲染类型(了解)

  • 相关阅读:
    C语言博客I作业04
    C语言I博客作业03
    C语言I博客作业02
    C语言ll作业01
    C语言寒假大作战04
    C语言寒假大作战03
    C语言寒假大作战02
    C语言寒假大作战01
    C语言I作业12—学期总结
    C语言I博客作业11
  • 原文地址:https://www.cnblogs.com/tangda/p/10821579.html
Copyright © 2011-2022 走看看