HTML的form表单和django的form表单


Posted in Python onJuly 25, 2019

django的表单系统,分2种

  • 基于django.forms.Form的所有表单类的父类
  • 基于django.forms.ModelForm,可以和模型类绑定的Form

直接用原生的form表单,也可以直接用,较麻烦,

django的form表单,也可用可不要,

在views里创建一个类,继承了forms.Form ,每个字段就是一个输入框,

#-----
#django 的form表单

from django import forms

class MyForm(forms.Form):
  #forms对应的是前端的form表单,form 表单要验证的字段
  #都与校验有关系,与数据库没有关系

  #封装性强,可以 在前端指定显示那些字段,label 是显示指定的数据,
  user = forms.CharField(label="用户名")#输入的用户名,
  age = forms.IntegerField(label="年龄")
  email = forms.EmailField()


#form注册

def reg2(request):
  # 实列化出一个form对象,传到前端

  form_obj = MyForm()

  return render(request,"reg2.html",{"form_obj":form_obj})

在前端新建一个注册页面,前端渲染表单,是后端表单类实例出来的对象,用对象调用每个字段,

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>

</head>
<body>

<h3>form表单使用</h3>
<form action="/reg2/" method="post">
{#  渲染从后端传来的变量,as_p 是段落#}
  {% csrf_token %}
{#  {{ form_obj.as_p }}#}
  <p>姓名{{ form_obj.user }}</p>
  <p>年龄{{ form_obj.age }}</p>
  <p>邮箱{{ form_obj.email }}</p>

</form>

</body>

</html>

可以从浏览器的检查元素中看到,浏览器自动添加了一些东西,

<body>

<h3>form表单使用</h3>
<form action="/reg2/" method="post">

  <input name="csrfmiddlewaretoken" value="GyY3KE5uM7HeErOEZ8OQFwUJYQYaknrOmavdmfufBuVOHdDSWfeHDyt2pjXarGAV" type="hidden">

  <p>姓名<input name="user" required="" id="id_user" type="text"></p>
  <p>年龄<input name="age" required="" id="id_age" type="number"></p>
  <p>邮箱<input name="email" required="" id="id_email" type="email"></p>

</form>
</body>

如果在前端页面随便输入就提交,前端会做校验,这都是浏览器做的校验,

HTML的form表单和django的form表单

可以自己定制,字段的错误信息提示,和显示信息,

#django 的form表单
 
from django import forms
 
class MyForm(forms.Form):
  #forms对应的是前端的form表单,form 表单要验证的字段
  #都与校验有关系,与数据库没有关系
 
  #封装性强,可以 在前端指定显示那些字段,label 是显示指定的数据,require 是必须填写的,
  user = forms.CharField(label="用户名",min_length=5,max_length=8)#输入的用户名,
  age = forms.IntegerField(label="年龄",error_messages={"required":"必填",})
  email = forms.EmailField()
 
 
#form注册
 
def reg2(request):
 
  errors_obj = " "
  if request.method == "POST":
    form_post = MyForm(request.POST)#拿到请求的所有数据
    if form_post.is_valid():#判断数据是否合法,返回布尔值,
 
      print("data",form_post.cleaned_data)#获取数据,得到一个字典格式,
 
    #添加数据库
    # User.objects.create_user()
  # 实列化出一个form对象,传到前端
 
    #如果是输入不合格式的信息,错误信息,
    else:
      #获取错误信息
      errors_obj = form_post.errors
 
      # print("error",form_post.errors["user"][0])
      # print("error",form_post.errors["age"])
      # print("error",type(form_post.errors))#字典类型,
 
 
  form_obj = MyForm()
 
  return render(request,"reg2.html",{"form_obj":form_obj,"errors_obj":errors_obj})

在前端页面

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>

</head>
<body>

<h3>form表单使用</h3>
<form action="/reg2/" method="post">
{#  渲染从后端传来的变量,as_p 是段落#}
  {% csrf_token %}
{#  {{ form_obj.as_p }}#}
  <p>姓名{{ form_obj.user }} <span>{{ errors.obj.user.0 }}</span> </p>
  <p>年龄{{ form_obj.age }}<span>{{ errors.obj.age.0 }}</span></p>
  <p>邮箱{{ form_obj.email }}<span>{{ errors.obj.email.0 }}</span></p>
  <input type="submit">

</form>

</body>

</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现简单的socket server实例
Apr 29 Python
利用python编写一个图片主色转换的脚本
Dec 07 Python
Python xlwt设置excel单元格字体及格式
Apr 18 Python
python之django母板页面的使用
Jul 03 Python
Python检查ping终端的方法
Jan 26 Python
Django中使用极验Geetest滑动验证码过程解析
Jul 31 Python
Python 通过截图匹配原图中的位置(opencv)实例
Aug 27 Python
flask/django 动态查询表结构相同表名不同数据的Model实现方法
Aug 29 Python
Python matplotlib绘制饼状图功能示例
Sep 10 Python
pygame实现打字游戏
Feb 19 Python
python 遗传算法求函数极值的实现代码
Feb 11 Python
基于Python快速处理PDF表格数据
Jun 03 Python
Python3 批量扫描端口的例子
Jul 25 #Python
python3 批量获取对应端口服务的实例
Jul 25 #Python
Python实现微信小程序支付功能
Jul 25 #Python
Form表单及django的form表单的补充
Jul 25 #Python
python实现切割url得到域名、协议、主机名等各个字段的例子
Jul 25 #Python
python按修改时间顺序排列文件的实例代码
Jul 25 #Python
在python中用url_for构造URL的方法
Jul 25 #Python
You might like
受疫情影响 动画《Re从零开始的异世界生活》第二季延期至7月
2020/03/10 日漫
Yii查询生成器(Query Builder)用法实例教程
2014/09/04 PHP
PHP答题类应用接口实例
2015/02/09 PHP
php实现的简单中文验证码功能示例
2017/01/03 PHP
php使用preg_match()函数验证ip地址的方法
2017/01/07 PHP
javascript循环变量注册dom事件 之强大的闭包
2010/09/08 Javascript
jquery 读取页面load get post ajax 四种方式代码写法
2011/04/02 Javascript
jQuery的ajax下载blob文件
2016/07/21 Javascript
javascript 中关于array的常用方法详解
2017/05/05 Javascript
详解Vue学习笔记入门篇之组件的内容分发(slot)
2017/07/17 Javascript
jQuery实现鼠标滑过商品小图片上显示对应大图片功能【测试可用】
2018/04/27 jQuery
vue addRoutes实现动态权限路由菜单的示例
2018/05/15 Javascript
解决vue 引入子组件报错的问题
2018/09/06 Javascript
使用imba.io框架得到比 vue 快50倍的性能基准
2019/06/17 Javascript
vue 的 solt 子组件过滤过程解析
2019/09/07 Javascript
深入了解Vue.js 混入(mixins)
2020/07/23 Javascript
Python开发实例分享bt种子爬虫程序和种子解析
2014/05/21 Python
为Python的web框架编写MVC配置来使其运行的教程
2015/04/30 Python
python pandas修改列属性的方法详解
2018/06/09 Python
使用python将图片按标签分入不同文件夹的方法
2018/12/08 Python
NumPy 基本切片和索引的具体使用方法
2019/04/24 Python
解决Pytorch 训练与测试时爆显存(out of memory)的问题
2019/08/20 Python
Python lxml模块的基本使用方法分析
2019/12/21 Python
使用jupyter Nodebook查看函数或方法的参数以及使用情况
2020/04/14 Python
python绘图模块之利用turtle画图
2021/02/12 Python
html5中为audio标签增加停止按钮动作实现方法
2013/01/04 HTML / CSS
香港时装购物网站:ZALORA香港
2017/04/23 全球购物
Myprotein意大利官网:欧洲第一运动营养品牌
2018/11/22 全球购物
彩色的非洲教学反思
2014/02/18 职场文书
2014教师研修学习体会
2014/07/08 职场文书
幼儿园大班开学寄语
2014/08/02 职场文书
大学生考试作弊检讨书1000字
2014/10/14 职场文书
Python基础之tkinter图形化界面学习
2021/04/29 Python
spring cloud 配置中心客户端启动遇到的问题
2021/09/25 Java/Android
Spring Cloud 中@FeignClient注解中的contextId属性详解
2021/09/25 Java/Android
Go gorilla securecookie库的安装使用详解
2022/08/14 Golang