forms组件
昨日回顾:
	批量插入数据:
		-queryset的方法:bulk_create(对象列表,数字(一次插入多少))
	分页器:
		from django.core.paginator import Paginator
		book_list=models.Book.objeces.all()
		pageinator=Paginator(book_list,10)
		pageinator.cout
		pageinator.num_pages
		pageinator.page_range
		#生成当前页码对象
		current_page=pageinator.page(当前页)
		current_page.object_list
		current_page.has_next()
		current_page.has_previous()
		上一页页码数
		下一页页码数
前端:
			-模板语言for循环,输出所有页码数
				-总页码数不够11,有多少,就输出多少
				-总页码数大于11,
					-当前页码数<6:page_range=range(1,12)
					-当前页码+5>总页码数:page_range=range(pageinator.num_pages-10,pageinator.num_pages+1)
					-其他情况:page_range=range(current_page_num-5,current_page_num+6)
			-点中页码跳转
				-'?page=13'
				-'/index/?page=13'----->路径不要忘掉前面的斜杠
装饰器	
		-
今日内容
	forms组件
		-forms是什么?
			就是一个类,可以校验字段(前台传过来的字段)
		-怎么用:
		-校验字段功能:
			-先写一个类,继承Form
			from django.shortcuts import render, HttpResponse
			from django import forms
			# 写一个类,要校验那些字段,就是类的属性
			class MyForm(forms.Form):
				# 定义一个属性,可以用来校验字符串类型
				# 限制最大长度是8,最小长度是3
				name=forms.CharField(max_length=8,min_length=3)
				pwd=forms.CharField(max_length=8,min_length=3,required=True)
				# 校验是否是邮箱格式
				email=forms.EmailField()
			-使用:
				#实例化产生对象,传入要校验的数据(字典)
				myform=MyForm(request.POST)
				# is_valid如果是true表示校验成功,反之,校验失败
				if myform.is_valid():
					# 校验通过的数据
					print(myform.cleaned_data)
					return HttpResponse('校验成功')
				else:
					print(myform.cleaned_data)
					#校验失败的信息
					print(myform.errors)
			-注意:校验的字段,可以多,但是不能少
		-渲染模板
			-第一中方式:(灵活性最高)
				<form action="" method="post" >
					<p>用户名: {{ myform.name }}</p>
					<p>密码: {{ myform.pwd }}</p>
					<p>邮箱: {{ myform.email }}</p>
					<input type="submit" value="提交">
				</form>
			-第二种方式:for循环form对象(用的比较多):
				<form action="" method="post" >
					{% for foo in myform %}
						<p>{{ foo.label }}:{{ foo }}</p>
					{% endfor %}
					<input type="submit" value="提交">
				</form>
			-第三种方式(不建议用):
				<form action="" method="post" >
{#    {{ myform.as_p }}#}
				{{ myform.as_ul }}
				<input type="submit" value="提交">
				</form>
-渲染错误信息
			- myforms有errors
			-属性(name)也有errors
			-错误信息,变成中文:
				- error_messages={'max_length': '最长是8', 'min_length': '最短是3', 'required': '这个必须填','invalid': '不符合邮箱格式'}
			-给input标签指定样式,指定格式:
				 -widget=widgets.TextInput(attrs={'class':'form-control'})
			-模板,渲染错误信息:<span>{{ myform.name.errors.0 }}</span>
		-局部钩子校验
			-定义一个函数,名字叫:clean_字段名字,内部,取出该字段,进行校验,如果通过,将该字段返回,如果失败,抛异常(ValidationError)
			-   def clean_name(self):
					# self:当前form对象
					name = self.cleaned_data.get('name')
					if name.startswith('sb'):
						# 失败,抛异常
						raise ValidationError('不能以傻逼开头')
					# 正常,把name返回
					return name
		-全局钩子
			#重写clean方法
			def clean(self):
				#程序能走到该函数,前面校验已经通过了,所以可以从cleaned_data中取出密码和确认密码		
				pwd=self.cleaned_data.get('pwd')
				re_pwd=self.cleaned_data.get('re_pwd')
				#进行自己的校验
				if pwd==re_pwd:
					#通过,直接返回cleaned_data
					return self.cleaned_data
				else:
					#失败,抛异常(ValidationError)
					raise ValidationError('两次密码不一致')
作业:*
	1 写一个注册功能(基本要求,用form表单提交)
	2 校验name字段在数据库里有没有,有返回错误信息
	3 应用bootstrap的样式
	4 password这个input,type是密码形式
	5 用forms的错误渲染功能
	6 升级要求,用ajax提交数据
	7 错误渲染也用dom操作,渲染
	8 (可以不写)当用户名失去焦点,直接判断用户名在数据库是否存在
	9 昨天的装饰器没写完的,敲一遍
	10 没写完的(用dom操作,渲染table),继续写
forms组件的更多相关文章
- Django学习之八:forms组件【对form舒心了】
		目录 Django forms组件 bound and unbound form instance forms渲染有关 隐藏一个字段,不渲染它 form 校验 form类 ModelForm 利用Mo ... 
- Django组件-Forms组件
		Django的Forms组件主要有以下几大功能: 页面初始化,生成HTML标签 校验用户数据(显示错误信息) HTML Form提交保留上次提交数据 一.小试牛刀 1.定义Form类 from dja ... 
- Django组件--forms组件(注册用)
		一.forms组件--校验类的使用 二.form组件--校验类的参数 三.forms组件校验的局部钩子--自定义校验规则(要看源码理解) 四.forms组件校验的全局钩子--校验form表单两次密码输 ... 
- web框架开发-Django的Forms组件
		校验字段功能 针对一个实例:用户注册. 模型:models.py class UserInfo(models.Model): name=models.CharField(max_length=32) ... 
- python django(forms组件)
		forms组件最大的作用,就是做数据校验. 普通做法,一个一个写校验规则,没有解耦.校验规则,都在视图函数里面. 网页校验 修改urls.py,增加路径addbook from app01 impor ... 
- Auth模块、Forms组件
		Auth模块 auth模块是Django自带的用户认证模块: 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功能,这 ... 
- django之forms组件
		在django中forms组件有其强大的功能,里面集合和众多的函数和方法:下面来看一下它的源码 """ Form classes """ f ... 
- (32)forms组件(数据校验)
		forms组件的用处 1.就是用来做数据校验的 2.渲染页面 3.渲染错误信息(和局部刷新同效果) 数据校验 要使用forms组件必须要写一个类继承forms组件 urls.py from bbs01 ... 
- python 全栈开发,Day78(Django组件-forms组件)
		一.Django组件-forms组件 forms组件 django中的Form组件有以下几个功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显 ... 
随机推荐
- 【转】未能加载文件或程序集“XXX”或它的某一个依赖项。试图加载格式不正确的程序。
			“/xxxxx”应用程序中的服务器错误. ------------------------------------------------------------------------------- ... 
- 数据仓库系列 - 缓慢渐变维度 (Slowly Changing Dimension) 常见的三种类型及原型设计
			在从 OLTP 业务数据库向 DW 数据仓库抽取数据的过程中,特别是第一次导入之后的每一次增量抽取往往会遇到这样的问题:业务数据库中的一些数据发生了更改,到底要不要将这些变化也反映到数据仓库中?在数据 ... 
- aop原理及理解
			概念 Aspect Oriented Programming,面向切面编程,实际上它是一个规范.一种设计思路,总之是抽象的. 先上图 使用目的 从项目结构上来说 对业务逻辑的各个部分进行隔离,降低业务 ... 
- Java框架spring Boot学习笔记(九):一个简单的RESTful API
			RESTful API设计需求如下: User.java package com.springboot.test; public class User { private Long id; priva ... 
- phpstorm中open in browser端口和路径设置
			phpstorm默认的端口号是:63342但是我装的apache服务器的默认端口是80网上查找资料,都说可以加listen的端口,比如这里 #Listen 12.34.56.78:80Listen 8 ... 
- Linux-01
			Linux各目录的作用 /bin/ 存放系统命令的目录,普通用户和超级用户都可以执行.不过放在/bin下的命令在单用户模式下也可以执行 /sbin/ 保存和系统环境设置相关的命令,只有超级用户可以使用 ... 
- Android  获取版本号名称工具类
			package com.example.grenaderose.redthunder.utils; import android.content.Context; import android.con ... 
- java中LIst转换成Json
			List转换成json串 public String getNameListByID(Long Id) { List<Name> nameLists= nameService.select ... 
- Max answer(单调栈+ST表)
			Max answer https://nanti.jisuanke.com/t/38228 Alice has a magic array. She suggests that the value o ... 
- Laravel 5 速查表
			Artisan // 在版本 5.1.11 新添加,见 http://d.laravel-china.org/docs/5.1/authorization#creating-policiesphp a ... 
