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读写Redis数据库操作示例
Mar 18 Python
python根据开头和结尾字符串获取中间字符串的方法
Mar 26 Python
用python写个自动SSH登录远程服务器的小工具(实例)
Jun 17 Python
PyQt5每天必学之QSplitter实现窗口分隔
Apr 19 Python
Python实现爬虫设置代理IP和伪装成浏览器的方法分享
May 07 Python
Numpy中的mask的使用
Jul 21 Python
Flask之请求钩子的实现
Dec 23 Python
详解如何在Apache中运行Python WSGI应用
Jan 02 Python
python的launcher用法知识点总结
Aug 07 Python
Python环境使用OpenCV检测人脸实现教程
Oct 19 Python
python 网络编程要点总结
Jun 18 Python
用python基于appium模块开发一个自动收取能量的小助手
Sep 25 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
关于页面优化和伪静态
2009/10/11 PHP
初学PHP的朋友 经常问的一些问题。不断更新
2011/08/11 PHP
Smarty变量调节器失效的解决办法
2014/08/20 PHP
php结合正则获取字符串中数字
2015/06/19 PHP
PHP中使用foreach()遍历二维数组的简单实例
2016/06/13 PHP
PHP面相对象中的重载与重写
2017/02/13 PHP
PHP7内核CGI与FastCGI详解
2019/04/14 PHP
PHP Trait代码复用类与多继承实现方法详解
2019/06/17 PHP
javascript 简单高效判断数据类型 系列函数 By shawl.qiu
2007/03/06 Javascript
类之Prototype.js学习
2007/06/13 Javascript
jquery ajax执行后台方法
2010/03/18 Javascript
不同Jquery版本引发的问题解决
2013/10/14 Javascript
JS模拟bootstrap下拉菜单效果实例
2016/06/17 Javascript
浅谈js多维数组和hash数组定义和使用
2016/07/27 Javascript
JS制作适用于手机和电脑的通知信息效果
2016/10/28 Javascript
BootStrap table使用方法分析
2016/11/08 Javascript
Mui使用jquery并且使用点击跳转新窗口的实例
2017/08/19 jQuery
Redux实现组合计数器的示例代码
2018/07/04 Javascript
vue实现打印功能的两种方法
2018/09/07 Javascript
[01:00]DOTA2 store: Collection of Artisan's Wonders
2015/08/12 DOTA
[02:42]完美大师赛主赛事淘汰赛第三日观众采访
2017/11/25 DOTA
简单的Python2.7编程初学经验总结
2015/04/01 Python
Python实现Linux的find命令实例分享
2017/06/04 Python
Python 多线程的实例详解
2017/09/07 Python
Python3实现的字典遍历操作详解
2018/04/18 Python
python实现图片彩色转化为素描
2019/01/15 Python
Pycharm 字体大小调整设置的方法实现
2019/09/27 Python
Python字节单位转换实例
2019/12/05 Python
图解Python中深浅copy(通俗易懂)
2020/09/03 Python
多视角3D逼真HTML5水波动画
2016/03/03 HTML / CSS
美国第二大连锁书店:Books-A-Million
2017/12/28 全球购物
世界上最全面的草药补充剂和顶级品牌维生素网站:HerbsPro
2019/01/20 全球购物
面向中国市场的在线海淘美妆零售网站:Beauty House美丽屋
2021/03/02 全球购物
PHP面试题集
2016/12/18 面试题
《飞向蓝天的恐龙》教学反思
2014/04/09 职场文书
Spring Boot配合PageHelper优化大表查询数据分页
2022/04/20 Java/Android