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列表list数组array用法实例解析
Oct 28 Python
使用python在本地电脑上快速处理数据
Jun 22 Python
Python字符串拼接的几种方法整理
Aug 02 Python
django 实现编写控制登录和访问权限控制的中间件方法
Jan 15 Python
python引用(import)某个模块提示没找到对应模块的解决方法
Jan 19 Python
python tkinter canvas 显示图片的示例
Jun 13 Python
pycharm创建scrapy项目教程及遇到的坑解析
Aug 15 Python
Python超越函数积分运算以及绘图实现代码
Nov 20 Python
flask实现验证码并验证功能
Dec 05 Python
使用Tensorboard工具查看Loss损失率
Feb 15 Python
python实现单张图像拼接与批量图片拼接
Mar 23 Python
一文轻松掌握python语言命名规范规则
Jun 18 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
为PHP初学者的8点有效建议
2010/11/20 PHP
解析PHP自带的进位制之间的转换函数
2013/06/08 PHP
PHP文件去掉PHP注释空格的函数分析(PHP代码压缩)
2013/07/02 PHP
Redis构建分布式锁
2017/03/28 PHP
php封装单文件上传到数据库(路径)
2017/10/15 PHP
使用js判断控件是否获得焦点
2014/01/03 Javascript
表单序列化与jq中的serialize使用示例
2014/02/21 Javascript
jquery ajaxSubmit 异步提交的简单实现
2014/02/28 Javascript
js构造函数、索引数组和属性的实现方式和使用
2014/11/16 Javascript
JavaScript中指定函数名称的相关方法
2015/06/04 Javascript
JavaScript子窗口调用父窗口变量和函数的方法
2015/10/09 Javascript
原生js的RSA和AES加密解密算法
2016/10/08 Javascript
js复制内容到剪贴板代码,js复制代码的简单实例
2016/10/27 Javascript
很棒的一组js图片轮播特效
2017/01/12 Javascript
vue动态绑定组件子父组件多表单验证功能的实现代码
2018/05/14 Javascript
在vue中v-bind使用三目运算符绑定class的实例
2018/09/29 Javascript
JavaScript禁用右键单击优缺点分析
2019/01/20 Javascript
elementui更改el-dialog关闭按钮的图标d的示例代码
2020/08/04 Javascript
nuxt.js写项目时增加错误提示页面操作
2020/11/05 Javascript
关于JavaScript中异步/等待的用法与理解
2020/11/18 Javascript
[10:53]2018DOTA2国际邀请赛寻真——EG
2018/08/11 DOTA
python游戏开发之视频转彩色字符动画
2019/04/26 Python
使用Python-OpenCV向图片添加噪声的实现(高斯噪声、椒盐噪声)
2019/05/28 Python
树莓派使用USB摄像头和motion实现监控
2019/06/22 Python
python turtle 绘制太极图的实例
2019/12/18 Python
PyQt5中多线程模块QThread使用方法的实现
2020/01/31 Python
Python3.9新特性详解
2020/10/10 Python
如何查看浏览器对html5的支持情况
2020/12/15 HTML / CSS
加拿大休闲和工业服装和鞋类零售商:L’Équipeur
2018/01/12 全球购物
马来西亚最热门的在线时尚商店:FashionValet
2018/11/11 全球购物
巴西网上药店:Drogaria Araujo
2021/01/06 全球购物
大学生党员自我评价范文
2014/04/09 职场文书
法制宣传月活动总结
2014/04/29 职场文书
英语教育专业毕业生求职信
2014/08/28 职场文书
法人单位适用的授权委托书
2014/09/19 职场文书
Python中22个万用公式的小结
2021/07/21 Python