django 基础知识 ~ forms详解

一 简介 今天咱们来聊聊 django强大的表单功能
二 分类
   1 ModelFrom ModelFrom只需要声明指定字段,其他的选择继承
   2 Froms (我们今天主要推这个)
     1 Forms需要声明规定每个字段
     2 forms.py文件 BaseForm,Form,DeclarativeFieldsMetaclass
     3 froms.py继承了相关字段的属性,所以直接调用文件属性即可
三  Froms作用
    1 自动生成HTML表单元素并且检查表单数据的合法性 
    2 数据类型转换(字符类型的数据转换成相应的Python类型)
四  内容
    1字段定义2元数据定义3方法重写
五  表单方法
    form=Form({})
   1 form.is_valid():#验证表单数据是否合法,返回True/False
      注意点 1 如果表单有多余的字段,只要相对应的字段符合要求,依然会返回True
   2 form.errors:#输出的是带标签的含有错误内容的格式->字典
    注意点
    1 后端:取某个字段的错误信息 form.errors.get(‘key‘)[index]->这里要注意,可能会有多个错误信息
    2 前端:取某个字段的错误信息 error.key.index配合<span>标签
    3 后端返回前端的用法 return {error:form.errors}
    4 常见报错类型 required,invalid
 3 form.cleand_data:#获取表单数据->字典
    注意点 1 cleaned_data中的值类型与字段定义的Field类型一致。
               2 value=form.clean_data.get方式取值
               3 数据存入 model.object.create(**form.cleand_data)
 4 前端显示,会将forms标签自带约束校验自动生成label标签 
   1 form.as_p:#将表单渲染成P标签
   2 form.key#取某个字段生成标签
五 字段控制相关
   1 默认会自动创建主键,如果不指定
   2 max/min_length 控制长度限制,CharFiled必须
   3 required 需要默认值,默认不为空
   4 error_messages 自定义错误 eg:error_messages={‘required/vaild‘: ‘Please enter your name‘}(实际并不常用),也可以独立建立字典变量
六 元数据
  定义 class Meta类
  db_table=‘‘在数据库中真正的表名称
七 示例代码
 1 models模块
  class User(models.Model):
  user=models.CharField(max_length=5)
  password=models.CharField(max_length=15)
  email=models.CharField(max_length=12)
  class Meta:
  db_table=‘User‘
2 views模块
 def register(request):
 if request.method==‘POST‘:
   biaodan=UserFrom(request.POST)
   if biaodan.is_valid():
      User.objects.create(**biaodan.cleaned_data)
      return HttpResponse(‘wae‘)
   else:

form=UserForm()
      return render(request,‘register.html‘,locals())
 else:
  form=UserForm()
  return render(request,‘register.html‘,locals())#locals带入本地变量
3 forms模块
  class UserFrom(forms.Form):
  user=forms.CharField(max_length=15,label=‘用户名‘,error_messages={"required":"用户名需要需要"})
  password=forms.CharField(max_length=10,label=‘密码‘,widget=widgets.PasswordInput(attrs={‘class‘:‘form-control‘}))
  email=forms.CharField(max_length=10,label=‘邮箱‘))
4 前端代码
   渲染方法1
  <form action="/register/" method="POST">
  {% csrf_token %}
  <div>
  用户名: {{ form.user }}<span>{{ error.user }}</span>
 </div>
  <div>
 密码: {{ form.password }}<span>{{ error.password }}</span>
  </div>
  <div>
  邮箱: {{ form.email }}<span>{{ error.email }}</span>
  </div>
  <div>
  <input type="submit" value="提交" />
   </div>
  </form>
渲染方法2
 <form action="/register/" method="POST">
 {% csrf_token %}
 {% for filed in form %}
 {% endfor %}
渲染方法3
<form action="/register/" method="POST">
{% csrf_token %}
{% for filed in form %}
<div class="form-row">
<label>{{ filed.label }}</label> //显示label字段说明
{{ filed }} //显示字段
{{filed.errors}}//显示错误信息
</div>
{% endfor %}
<input type="submit">

</form>
九 补充
1 两层验证机制 1 前端 2 forms表单
2 自定义约束前端显示属性 weight包
widget=widgets.type(attrs={‘class‘:‘form-control‘})

原文地址:https://www.cnblogs.com/danhuangpai/p/10984420.html

时间: 2024-08-30 00:49:19

django 基础知识 ~ forms详解的相关文章

python基础知识~ 函数详解2

python~函数详解2 1 生成器函数   定义 如果函数有yield这个关键字,就是生成器函数.生成器函数() 获取的是生成器,不执行函数  须知 yield和return一样,都可以返回数据,但是不会彻底中断函数,分段进行函数处理  继续执行 函数(迭代器)  __next__()   __send__(参数)//和next具有同一个功能,还添加了给上一个值赋值功能  def func()  print(a)  a=yield 1 //yield特殊定义   print (b)  b=yi

[C#基础知识]委托详解

1. 委托是什么? 个人认为,可以从以下2点来理解:  (1) 从数据结构来讲,委托是和类一样是一种用户自定义类型. (2) 从设计模式来讲,委托(类)提供了方法(对象)的抽象. 既然委托是一种类型,那么它存储的是什么数据? 我们知道,委托是方法的抽象,它存储的就是一系列具有相同签名和返回回类型的方法的地址.调用委托的时候,委托包含的所有方法将被执行. 2. 委托类型的定义 委托是类型,就好像类是类型一样.与类一样,委托类型必须在被用来创建变量以及类型对象之前声明. delegate void

java笔记--反射机制之基础总结与详解

一.反射之实例化Class类的5种方式: java的数据类型可以分为两类,即引用类型和原始类型(即基本数据类型). 对于每种类型的对象,java虚拟机会实例化不可变的java.lang.Class对象. 它提供了在运行时检查对象属性的方法,这些属性包括它的成员和类型信息. 更重要的是Class对象是所有反射API的入口. Class类是泛型类,可以使用@SuppressWarnings("unchecked")忽略泛型或者使用Class<V>类型. 获得Class对象的5种

基础拾遗------webservice详解

基础拾遗 基础拾遗------webservice详解 基础拾遗------redis详解 基础拾遗------反射详解 基础拾遗------委托详解 基础拾遗------接口详解 基础拾遗------泛型详解 前言 工作当中常用的服务接口有三个wcf,webservice和webapi.首先第一个接触的就是webservice,今天大致总结一下. 1.webservice概念相关 1.1.Web Service也叫XML Web Service WebService 是一种可以接收从Inter

Linux 程序设计学习笔记----终端及串口编程基础之概念详解

转载请注明出处,谢谢! linux下的终端及串口的相关概念有: tty,控制台,虚拟终端,串口,console(控制台终端)详解 部分内容整理于网络. 终端/控制台 终端和控制台都不是个人电脑的概念,而是多人共用的小型中型大型计算机上的概念. 1.终端 一台主机,连很多终端,终端为主机提供了人机接口,每个人都通过终端使用主机的资源. 终端有字符哑终端和图形终端两种. 控制台是另一种人机接口, 不通过终端与主机相连, 而是通过显示卡-显示器和键盘接口分别与主机相连, 这是人控制主机的第一人机接口.

Django[基础知识]

Python功能最全的WEB框架:Django,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. 使用Django需进行以下操作: 1.创建Django项目,创建方式有两种. a.命令操作: django-admin startproject  dg_web   //dg_web为项目名称 b.直接在开发环境IDE下进行新建django项目 创建项目之后的文件目录如下: 2.在创建的项目下建立功能程序,操作如下: 命令行:python manage.py startap

(赵小明RHCE笔记)linux基础之四 权限详解

一.special permissions for executables1.special permissions for executables:  -suid:command run with permissions of the owner of the command,not executor of   the command  -sgid:command runs with group affiliation of the group of the commandeg:file:us

基础拾遗------redis详解

基础拾遗 基础拾遗------redis详解 基础拾遗------反射详解 基础拾遗------委托详解 基础拾遗------接口详解 基础拾遗------泛型详解 前言 这篇文章和以往的基础拾遗有所不同,以前的介绍的都是c#基础,今天介绍的是redis.因为项目中一只在使用,我想现在大部分项目中都会用到nosql,缓存,今天就介绍一下redis..废话少说下面开始正题. 1.redis是什么? Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. 对的redi

java基础之:详解内部类(转载)

可以将一个类的定义放在另一个类的定义内部,这就是内部类. 内部类是一个非常有用的特性但又比较难理解使用的特性(鄙人到现在都没有怎么使用过内部类,对内部类也只是略知一二). 第一次见面 内部类我们从外面看是非常容易理解的,无非就是在一个类的内部在定义一个类. [java] view plain copy print? public class OuterClass { private String name ; private int age; public String getName() {