• Django——forms组件(form校验字段功能,渲染模板功能)


    一、forms组件介绍

    1 注册功能,登录功能,前端需要校验(字段长度,邮箱是否合法。。。)
    2 前端校验可以没有,后端校验是必须的,使用传统方式  if判断写的很多
    3 借助于forms组件,可以快速实现字段的校验
        from django.forms import Form
      或者from django import forms

    二、forms校验字段功能

    url.py

    from django.urls import path
    from app01 import views
    urlpatterns = [
        #   path('admin/', admin.site.urls),
           path('register', views.register),
    ]

    views.py

    注意点:

        1 调用is_valid()后,有form.errors和form.cleaned_data
        2 form.cleaned_data不管成功与失败,都会有值,不一定是传入的值
        3 form.errors看了源码,as_data,as_ul...

    代码:

    from app01 import myforms
    def register(request):
        # 数据可以是从前端传过来的,也可以是自己后台的数据
    
        # 我现在有以下数据
        data={'name':'lqz','email':'33333@qq.com','age':900}
        # data={'email':'33333@qq.com','age':100}
        # data={'age':100}
        # 校验数据是否合法
        # 实例化得到form对象,把要校验的数据传入
        form=myforms.MyForm(data)
        # 校验数据:form.is_valid() 返回布尔类型
    
        if form.is_valid():
            print('校验通过')
            # 校验通过的数据
            print(form.cleaned_data)  # 不一定是上面传入的数据
        else:
            print(form.cleaned_data)
            print('校验失败')
            # 哪个字段失败了?失败的原因是什么
            print(form.errors)
            print(type(form.errors))
            from django.forms.utils import ErrorDict
            #### 重写了__str__
            print(form.errors.as_json())
            print(form.errors.as_data())
    
            # form.errors.as_ul()  # 是为了渲染模板
    
        return HttpResponse('ok')

    myforms.py

    from django import forms
    
    # 写一个类,写字段
    class MyForm(forms.Form):
        # 校验这个字段,最大长度是32,最小长度是3
        name = forms.CharField(required=False, max_length=32, min_length=3,label='用户名')
        email = forms.EmailField(label='邮箱')#required不写默认=True,那么在校验的时候就必须校验,会显示校验失败没传该字段
        age=forms.IntegerField(max_value=200,min_value=0,label='年龄')

    三、forms渲染模板功能

    url.py   myforms.py同form校验字段功能

    views.py

    from app01 import myforms
    
    def register(request):
        if request.method=='GET':
            form=myforms.MyForm()
            return render(request,'register.html',{'form':form})
        elif request.method=='POST':
            # 数据校验
            form=myforms.MyForm(request.POST)
            if form.is_valid():
                print('校验通过,存数据库')
            else:
                print(form.errors.as_data())
                print('校验失败,返回错误')
            return HttpResponse('ok')

    register.py

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <hr>
    <h1>手动创建模板</h1>
    <form action="" method="post">
        <p>用户名:<input type="text" name="name"></p>
        <p>邮箱:<input type="text" name="email"></p>
        <p>年龄:<input type="text" name="age"></p>
        <p><input type="submit" value="提交"></p>
    </form>
    
    <hr>
    <h1>半自动渲染模板1</h1>
    <form action="" method="post">
        <p>用户名:{{ form.name }}</p>
        <p>邮箱:{{ form.email }}</p>
        <p>年龄:{{ form.age }}</p>
        <p><input type="submit" value="提交"></p>
    </form>
    
    <h1>半自动渲染模板2(用的最多)</h1>
    <form action="" method="post">
        <p>{{ form.name.label }}--{{ form.name }}</p>
        <p>{{ form.email.label }}---{{ form.email }}</p>
        <p>{{ form.age.label }}---{{ form.age }}</p>
        <p><input type="submit" value="提交"></p>
    </form>
    
    <h1>半自动渲染模板3(用的最多)</h1>
    <form action="" method="post">
        {% for foo in form %}
           <p>{{ foo.label }} :{{ foo }}</p>
        {% endfor %}
    
        <p><input type="submit" value="提交"></p>
    </form>
    
    <h1>全自动(了解)</h1>
    <form action="" method="post">
    {#    {{ form.as_ul }}#}
        {{ form.as_p }}
    {#    <table>#}
    {#        {{ form.as_table }}#}
    {#    </table>#}
    
        <p><input type="submit" value="提交"></p>
    </form>
    </body>
    </html>
  • 相关阅读:
    N4-某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。
    N3-按链表值从尾到头的顺序返回一个ArrayList。
    N2-替换字符串空格
    innodb死锁1213
    innodb是行锁还是表锁
    docker是什么,docker干什么用
    innodb通过frm ibd还原数据,线上项目验证过
    机器性能预警系统(cpu,process,内存,硬盘监控)并钉钉机器人报警
    mysql++ query.more_results()为true时,query.store_next()就崩掉了
    yum install nload失败,提示No package nload available.Error: Nothing to do
  • 原文地址:https://www.cnblogs.com/guojieying/p/13845793.html
Copyright © 2020-2023  润新知