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')

如果输入正确的验证信息

后台输出

扫描二维码关注公众号,回复: 4546749 查看本文章

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>

小结:

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

猜你喜欢

转载自www.cnblogs.com/mjiu/p/10134411.html