forms组件:

  校验字段功能:

  针对一个实例:注册用户。

  模型:models.py

class UserInfo(models.Model):
name=models.CharField(max_length=32)
pwd=models.CharField(max_length=32)
email=models.EmailField()
tel=models.CharField(max_length=32)

  模板:register.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title> </head>
<body> <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="text" name="email" id="email"></p>
</div>
<input type="submit">
</form> </body>
</html>

  视图函数:register

# forms组件
from django.forms import widgets wid_01=widgets.TextInput(attrs={"class":"form-control"})
wid_02=widgets.PasswordInput(attrs={"class":"form-control"}) class UserForm(forms.Form):
name=forms.CharField(max_length=32,
widget=wid_01
)
pwd=forms.CharField(max_length=32,widget=wid_02)
r_pwd=forms.CharField(max_length=32,widget=wid_02)
email=forms.EmailField(widget=wid_01)
tel=forms.CharField(max_length=32,widget=wid_01) def register(request): if request.method=="POST":
form=UserForm(request.POST)
if form.is_valid():
print(form.cleaned_data) # 所有干净的字段以及对应的值
else:
print(form.cleaned_data) #
print(form.errors) # ErrorDict : {"校验错误的字段":["错误信息",]}
print(form.errors.get("name")) # ErrorList ["错误信息",]
return HttpResponse("OK")
form=UserForm()
return render(request,"register.html",locals())

渲染标签功能:

  渲染方式1:

<h3>渲染方式一</h3>
<form action="" method="post" novalidate>
{% csrf_token %}
{{ form.as_p }}
<input type="submit">
</form>
</body>
</html>

  直接将form对象传入,然后通过.as_p方法可以将每一个字段都以input标签建成。

  input标签前的名字,默认是字段名,若想显示为中文,则需要在字段属性中,添加lable.如:

class UserForm(forms.Form):
name = forms.CharField(min_length=4,label="姓名")
pwd = forms.CharField(max_length=16,label="密码")
age = forms.IntegerField(label="年龄")
tel = forms.CharField(label="电话")

  渲染方式2:

<h3>渲染方式二</h3>
<form action="" method="post" novalidate>
{% csrf_token %}
<div>
<label for="">用户名</label>
{{ form.name }}
{# 一定要是form.字段名#}
</div>
<div>
<label for="">密码</label>
{{ form.pwd }}
</div>
<div>
<label for="">年龄</label>
{{ form.age }}
</div>
<div>
<label for="">电话</label>
{{ form.tel }}
</div>
<input type="submit">
</form>

  

  渲染方式三:form表单外是加了一些bootstrap样式

<div class="container">
<div class="row">
<div class="col-md-8">
<form action="" method="post" novalidate>
{% csrf_token %}
{% for field in form %}
<div class="form-group">
<label for="">{{ field.label }}</label>
{{ field }}
</div>
{% endfor %}
<input type="submit">
</form>
</div>
</div>
</div>

  显示错误与重置输入信息功能:

  视图:

from django.shortcuts import render,HttpResponse,reverse,redirect

# Create your views here.

from app01.form import UserForm
def register(request):
if request.method == "POST":
form = UserForm(request.POST)
if form.is_valid():
print("######success#######")
print(form.cleaned_data)
print(form.errors)
print(type(form.errors))
return HttpResponse("添加成功")
else:
print("##########failed##########")
print(form.cleaned_data) # 正确的情况下会显示的字典。
print(form.errors) # 是一个字典。
print(form.errors.get("name")) # 拿到的是ul里面包着错误信息
print(form.errors.get("name")[0]) # 拿到的是错误信息
return render(request,"register.html",locals())
form = UserForm()
return render(request,"register.html",locals())

  模板:

<div class="container">
<div class="row">
<div class="col-md-8 col-lg-offset-2">
<form action="" method="post" novalidate>
{% csrf_token %}
{% for field in form %}
<div class="form-group">
<label for="">{{ field.label }}</label>
{{ field }} <span class="errors pull-left">{{ field.errors.0 }}</span>
</div>
{% endfor %}
<div class="form-group">
<input type="submit" class=" btn btn-success btn-sm">
</div>
</form>
</div>
</div>
</div>

局部钩子与全局钩子:

  模板:

from django import forms
from django.core.exceptions import ValidationError,NON_FIELD_ERRORS
from django.forms import widgets # widgets可以设置css样式 class UserForm(forms.Form):
name = forms.CharField(min_length=4,label="姓名",widget=widgets.TextInput(attrs=({"class":"form-control"})))
pwd = forms.CharField(max_length=16,label="密码",widget=widgets.PasswordInput(attrs=({"class":"form-control"})))
age = forms.IntegerField(label="年龄",widget=widgets.TextInput(attrs=({"class":"form-control"})))
tel = forms.CharField(label="电话",widget=widgets.TextInput(attrs=({"class":"form-control"}))) def clean_name(self): # 函数名格式必须是 clean_字段名。源码规定。
val = self.cleaned_data.get("name") # 从正确字典中获取name数据。
if not val.isdigit(): # 如果不是纯数字。
return val # 返回源数据。
else:
raise ValidationError('用户名不能是纯数字') # 否则就抛出错误。 def clean_pwd(self):
val = self.cleaned_data.get("pwd")
if len(val)>6:
return val
else:
raise ValidationError("密码不足6位") def clean_age(self):
val = self.cleaned_data.get("age")
if int(val)>=18:
return val
else:
raise ValidationError('未成年不得入内') def clean_tel(self):
val = self.cleaned_data.get("tel")
if int(val)==11:
return val
else:
raise ValidationError("手机号不合法")

  视图:

<div class="container">
<div class="row">
<div class="col-md-8 col-lg-offset-2">
<form action="" method="post" novalidate>
{% csrf_token %}
{% for field in form %}
<div class="form-group">
<label for="">{{ field.label }}</label>
{{ field }} <span class="errors pull-left">{{ field.errors.0 }}</span>
</div>
{% endfor %}
<div class="form-group">
<input type="submit" class=" btn btn-success btn-sm">
</div>
</form>
</div>
</div>
</div>

Django组件—forms组件的更多相关文章

  1. Django组件-Forms组件

    Django的Forms组件主要有以下几大功能: 页面初始化,生成HTML标签 校验用户数据(显示错误信息) HTML Form提交保留上次提交数据 一.小试牛刀 1.定义Form类 from dja ...

  2. django之forms组件

    在django中forms组件有其强大的功能,里面集合和众多的函数和方法:下面来看一下它的源码 """ Form classes """ f ...

  3. python 全栈开发,Day78(Django组件-forms组件)

    一.Django组件-forms组件 forms组件 django中的Form组件有以下几个功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显 ...

  4. django第13天(auth组件,forms组件,中间件,csrf)

    django第13天(auth组件,forms组件) auth组件 -auth组件 -auth是什么? -django内置的用户认证系统,可以快速的实现,登录,注销,修改密码.... -怎么用? -( ...

  5. 08 Django组件-Forms组件

    Django的Forms组件主要有以下几大功能: 页面初始化,生成HTML标签 校验用户数据(显示错误信息) HTML Form提交保留上次提交数据 一.小试牛刀 1.定义Form类 from dja ...

  6. Django组件--forms组件(注册用)

    一.forms组件--校验类的使用 二.form组件--校验类的参数 三.forms组件校验的局部钩子--自定义校验规则(要看源码理解) 四.forms组件校验的全局钩子--校验form表单两次密码输 ...

  7. web框架开发-Django的Forms组件

    校验字段功能 针对一个实例:用户注册. 模型:models.py class UserInfo(models.Model): name=models.CharField(max_length=32) ...

  8. Django组件——forms组件

    一.校验字段功能 通过注册用户这个实例来学习校验字段功能. 1.模型:models.py from django.db import models # Create your models here. ...

  9. 12 Django组件-forms组件

    forms组件 校验字段功能 针对一个实例:注册用户讲解. 模型:models.py class UserInfo(models.Model): name=models.CharField(max_l ...

随机推荐

  1. 关于Gradle2.0的翻译说明

    Gradle1.12的翻译情况 Gradle实际上在4月16日就已经在对应的OmegaT项目上完成了翻译,后因项目繁忙,直到7月20日才完成了Github上Gradledoc项目及七牛站点的更新. 总 ...

  2. 使用Sinopia搭建私有npm仓库

    使用Sinopia搭建私有npm仓库 在用npm装包的时候,每次都要下载一大堆,慢且不说,npm还老被墙,所以就想到在公司内部搭建npm仓库镜像.大概看了几个,觉得Sinopia最简单也好用,所以就使 ...

  3. 非在线PDF转图片!!!

    关于非在线 由于这次要转的是身份证,不是阴谋论,防人之心还是要有的.万一呢. 关于工具 试了好多工具,有一家软件竟然是反过来的,即图片转pdf.也给搜了出来,主要的是下载页面还显示的pdf转图片,啊呸 ...

  4. 【剑指offer】二叉树中和为某一值的路径,C++实现

    原创文章,转载请注明出处! 博客文章索引地址 1.题目 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径由结点和有向边组成,从根结点到叶节点. // 二叉树结点的定义 st ...

  5. Android Dialog 创建上下文菜单

    Android Dialog中的listview创建上下文菜单 listView.setOnCreateContextMenuListener(new OnCreateContextMenuListe ...

  6. huawei机试题目

    1/*输入一个字符串,输出这个字符串中单词的字典排序*/ bool cmp(char* a,char* b){ ? true:false; } void sortWord(char* str) { v ...

  7. BZOJ3963: [WF2011]MachineWorks 【CDQ+斜率优化DP】*

    BZOJ3963: [WF2011]MachineWorks Description 你是任意性复杂机器公司(Arbitrarily Complex Machines, ACM)的经理,公司使用更加先 ...

  8. php 中的 Output Control 函数

    先看一个简单的例子 <?php ob_start(); echo 111; ob_clean(); echo 222; ob_start()开启ob缓存,然后111放进了ob缓存, 再调用ob_ ...

  9. FastAdmin 中使用 Oder by if 强行将某一类放到前面

    FastAdmin 中使用 Oder by if 强行将某一类放到前面 问题来源社区问题 1,查了一些资料2,做了测试. 如下表,我想把 snake 单独放到开始. 可以使用以下查询语句(默认为 AS ...

  10. oracle表空间维护常用命令

    ---查看表空间的名字及文件所在位置: select tablespace_name, file_id, file_name,round(bytes/(1024*1024),0) total_spac ...