form组件

Posted mainstream

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了form组件相关的知识,希望对你有一定的参考价值。

form组件

一、form组件简介

  1、form在组件的两大功能:

  • 数据重置
  • 校验规则

  2、form组件于传统form表单对比

  • 当我们用传统的form表单提交时会刷新页面,如果这个我们表单中的某项填错了,刷新后我们正确的选项也没有了.
  • 传统的form表单需要我们自己亲自校验每一项,其工作量太大
  • form组件前端自动生成表单元素。

  • form组件可自动验证表单内容信息。

  • form组件可保留用户上次输入的信息。

但是form表单的输出不包含submit 按钮,和表单的<form> 标签。 你必须自己提供。

二、form组件生成方法(三种)

1、方法一

<form action="/login/" method="post" novalidate>
    % csrf_token %
     form_obj.as_p                   # form.as_p 将它们渲染在<p> 标签中        
     form_obj.as_table                 # form.as_table  以表格的形式将它们渲染在<tr> 标签中
     form_obj.as_ul                   # form.as_ul 将它们渲染在<li> 标签中
    <p><input type="submit" value="提交"></p>
</form>

But:你必须自己提供<ul> 或 <table> 元素。

 方式一示例

#html

<form action="/login/" method="post" novalidate>     #novalidate不对输入进行验证的表单
    % csrf_token %
     form_obj.as_p 
    <p><input type="submit" value="提交"></p>
</form>


#views

from . import models
from django import forms
from django.forms import widgets
from django.core.exceptions import NON_FIELD_ERRORS,ValidationError


class LoginForm(forms.Form):
    user = forms.CharField(max_length=12,min_length=5,
                        label="用户名",
                        help_text="6~16个字符,区分大小写",
                        error_messages="required":"不能为空",
                                        "min_length":"最小长度为5",)

    pwd = forms.CharField(
        help_text= "6~16个字符,区分大小写",
        error_messages=
            "invalid":"格式错误"

        ,
        widget = widgets.PasswordInput(attrs="class":"active")

    )

def login(request):

if request.method == "POST":

form_obj = LoginForm(request.POST)
if form_obj.is_valid():
# 数据全部合格
#取出合格数据
return HttpResponse("success")
else:
# 最少存在一个字段的错误
#取出错误信息
return render(request, "login.html", "form_obj": form_obj) #存放错误信息
form_obj = LoginForm()
return render(request,"login.html","form_obj":form_obj)

  技术图片

2、方法二(在任意标签中渲染)

<form action="/login/" method="post" novalidate>    # novalidate不对输入进行验证的表单 
   % csrf_token %
    <div>
    <label for="user">用户名:</label>
     form_obj.user 
        <span> form_obj.errors.user.0 </span>
    </div>
    <div>
    <label for="pwd">密码:</label>
     form_obj.pwd <span> form_obj.errors.pwd.0 </span>
    </div>
    <p><input type="submit" value="提交"><span> ret.0 </span></p>
</form>

  

 

3、方法三(for循环生成)

<form action="/login/" method="post" novalidate>
   % csrf_token %
    % for field in form_obj %
        <div>
        <lable> field.label </lable>
         field 
        </div>
    % endfor %

  

 

 

 

 

 

 

 

 

以上是关于form组件的主要内容,如果未能解决你的问题,请参考以下文章

form组件

Django之Form组件

ModelForm组件和forms组件补充

Django组件-forms组件

17 Django Form组件

组件分享之前端组件——用于自定义表单的前端组件form-create