首页 > 其他 > 详细

form(form基础、标签渲染)

时间:2018-12-17 23:36:30      阅读:186      评论:0      收藏:0      [点我收藏+]

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‘: ‘asdas@dsad.com‘}

 

可以看出输入符合验证条件的数据, 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‘: ‘asdas@dsad.com‘}
错误信息的类型--------- <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基础、标签渲染)

原文:https://www.cnblogs.com/mjiu/p/10134411.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!