form(form基础标签渲染)

Posted mjiu

tags:

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

form基础

Django中的Form使用时一般有两种功能:

1、生成html标签

2、验证输入内容

要想使用django提供的form,要在views里导入form模块

  from django import forms

 

首先我们创建我们的模版

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<h3>普通方式</h3>

<form action=""method="post">
    {% csrf_token %}
    <div>
        <label for=user>用户名</label>
        <p><input type="text" name="name" id="name"></p>
    </div>
    <div>
        <label for=pwd>密码</label>
        <p><input type="password" name="pwd" id="pwd"></p>
    </div>
    <div>
        <label for=r_pwd>确认密码</label>
        <p><input type="password" name="r_pwd" id="r_pwd"></p>
    </div>
    <div>
        <label for=email>邮箱</label>
        <p><input type="email" name="email" id="email"></p>
    </div>
     <input type="submit">
</form>
</body>
</html>

 

然后我们来定义一个form 类,以及我们需要掌握的一些基础知识,这些代码全部写在 试图页面里。

from django.shortcuts import render,HttpResponse
from django.forms import widgets
# Create your views here.

from django.forms import widgets
from django import forms

#创建form表单验证规则
class UserForm(forms.Form):
    name = forms.CharField(min_length=4),
    pwd = forms.CharField(min_length=6),
    r_pwd = forms.CharField(min_length=6),
    email = forms.EmailField(),

def index(request):
    if request.method == POST:
        form = UserForm(request.POST)
        #如果输入全部符合规则判断为真将结果传递给 changed_data,并打印
        print(form.is_vaild---------,form.is_valid())
        if form.is_valid():
            print(form.changed_data)
        #如果失败,打印为真的值,打印错误,获取错误字典中name 的错误值。
        else:
            print(form.cleaned_data)
            print(错误信息的类型---------,type(form.errors))
            print(form.errors)
            print(form.errors.get(name))
        return HttpResponse(ok)
    form=UserForm()

    return render(request,index.html)

如果输入正确的验证信息

后台输出

form.is_vaild--------- True

{‘name‘: ‘召唤精灵‘, ‘pwd‘: ‘1111111111‘, ‘r_pwd‘: ‘1111111111‘, ‘email‘: ‘[email protected]‘}

 

可以看出输入符合验证条件的数据, is_vaild  会返回 True  ,然后正确信息会存储到cleaned_data 中

 

下面输入一下错误验证信息

form.is_vaild--------- False
错误信息的类型--------- <class ‘django.forms.utils.ErrorDict‘>
获取错误信息字典 <ul class="errorlist"><li>name<ul class="errorlist"><li>Ensure this value has at least 4 characters (it has 3).</li></ul></li></ul>
<ul class="errorlist"><li>Ensure this value has at least 4 characters (it has 3).</li></ul>

可以看到类型是已字典到形式存储到,然后咱们通过字典到的取值方法 get 取到验证错误到报错信息。

如果同时有错误有正确会怎么样

 

form.is_vaild--------- False
{‘pwd‘: ‘11111111111‘, ‘r_pwd‘: ‘1111111111‘, ‘email‘: ‘[email protected]‘}
错误信息的类型--------- <class ‘django.forms.utils.ErrorDict‘>
获取错误信息字典 <ul class="errorlist"><li>name<ul class="errorlist"><li>Ensure this value has at least 4 characters (it has 3).</li></ul></li></ul>
<ul class="errorlist"><li>Ensure this value has at least 4 characters (it has 3).</li></ul>

 

虽然验证失败了,但是cleaned_data中保留了正确的验证信息。

 

标签渲染

方式一

<h3>方式一</h3>

<form action="" method="post">
    {% csrf_token %}
    <div>
        <label for="">用户名</label>
        {{ form.name }}
    </div>
    <div>
        <label for="">密码</label>
        {{ form.pwd }}
    </div>
    <div>
        <label for="">确认密码</label>
        {{ form.r_pwd }}
    </div>
    <div>
        <label for=""> 邮箱</label>
        {{ form.email }}
    </div>
    <input type="submit" >
</form>

方式二

需要给form验证条件,添加 label属性

class UserForm(forms.Form):
    name = forms.CharField(min_length=4,label=用户名)
    pwd = forms.CharField(min_length=6,label=密码)
    r_pwd = forms.CharField(min_length=6,label=确认密码)
    email = forms.EmailField(label=邮箱)

 

<h4>方式二</h4>
<form action="" method="post">
    {% csrf_token %}
    {% for foo in form %}
        <div>
            <label for="">{{ foo.label }}</label>
         {{ foo }}
        </div>

    {% endfor %}
    <input type="submit">

方式三

<h4>方式三</h4>
<form action="" method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <input type="submit">
</form>

 

小结:

虽然这三种标签渲染的方式 第三种最为简介方便,但是局限性也最大,不能根据自己的需求调整标签,只能使用他提供的方法,如果常用的话还是选择第二种标签渲染方式。

以上是关于form(form基础标签渲染)的主要内容,如果未能解决你的问题,请参考以下文章

Chrome 不会渲染 <form> 标签,FF 会

在 Xamarin Forms 自定义标签渲染器中,增加边界的大小

allow_tags=True 不在 django admin 中渲染 <form> 标签

什么是Taglib?

带有 <image>( X ) 标签的 simple_form 渲染单选按钮组与 twitter 引导程序?

Form标签表单回显与提交