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数组遍历的简单实现方法小结
Apr 27 Python
详解Python的collections模块中的deque双端队列结构
Jul 07 Python
使用python调用zxing库生成二维码图片详解
Jan 10 Python
使用Python对Csv文件操作实例代码
May 12 Python
Python操作redis实例小结【String、Hash、List、Set等】
May 16 Python
anaconda中更改python版本的方法步骤
Jul 14 Python
pygame实现成语填空游戏
Oct 29 Python
python文件绝对路径写法介绍(windows)
Dec 25 Python
用python3读取python2的pickle数据方式
Dec 25 Python
如何使用python的ctypes调用医保中心的dll动态库下载医保中心的账单
May 24 Python
python切片作为占位符使用实例讲解
Feb 17 Python
Python中的turtle画箭头,矩形,五角星
Mar 16 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
使用 PHPMAILER 发送邮件实例应用
2012/11/07 PHP
用PHP编写和读取XML的几种方式
2013/01/12 PHP
基于php伪静态的实现详细介绍
2013/04/28 PHP
PHP Class&amp;Object -- PHP 自排序二叉树的深入解析
2013/06/25 PHP
详解PHP原生DOM对象操作XML的方法
2016/10/17 PHP
用prototype实现的简单小巧的多级联动菜单
2007/03/24 Javascript
让iframe子窗体取父窗体地址栏参数(querystring)
2009/10/13 Javascript
JavaScript Array对象扩展indexOf()方法
2014/05/09 Javascript
JavaScript设计模式之代理模式介绍
2014/12/28 Javascript
js实现兼容性好的微软官网导航下拉菜单效果
2015/09/07 Javascript
基于jQuery实现音乐播放试听列表
2016/04/14 Javascript
jQuery第一次运行页面默认触发点击事件的实例
2018/01/10 jQuery
JavaScript树的深度优先遍历和广度优先遍历算法示例
2018/07/30 Javascript
详解ES6中的Map与Set集合
2019/03/22 Javascript
javascript防抖函数debounce详解
2019/06/11 Javascript
JQuery常用选择器功能与用法实例分析
2019/12/23 jQuery
JS 设计模式之:工厂模式定义与实现方法浅析
2020/05/06 Javascript
[04:29]2016国际邀请赛中国区预选赛Ehome战队教练采访
2016/06/27 DOTA
[53:03]Optic vs TNC 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
Python字符串格式化
2015/06/15 Python
使用Turtle画正螺旋线的方法
2017/09/22 Python
python 3.5实现检测路由器流量并写入txt的方法实例
2017/12/17 Python
pycharm工具连接mysql数据库失败问题
2020/04/01 Python
利用python下载scihub成文献为PDF操作
2020/07/09 Python
HTML5应用之文件上传
2016/12/30 HTML / CSS
美国家居用品和厨具购物网站:DealsDot
2019/10/07 全球购物
大学毕业生通用自荐信范文
2013/10/31 职场文书
打架检讨书800字
2014/01/10 职场文书
毕业班联欢会主持词
2014/03/27 职场文书
绿色环保家庭事迹材料
2014/08/31 职场文书
群众路线个人整改措施
2014/10/24 职场文书
党风廉正建设责任书
2015/01/29 职场文书
家庭经济困难证明
2015/06/23 职场文书
火锅店的开业营销方案范本!
2019/07/05 职场文书
草系十大最强宝可梦,纸片人上榜,榜首大家最熟悉
2022/03/18 日漫
Golang Web 框架Iris安装部署
2022/08/14 Python