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列表生成式与生成器操作示例
Aug 01 Python
浅谈django orm 优化
Aug 18 Python
详解将Django部署到Centos7全攻略
Sep 26 Python
对pandas中iloc,loc取数据差别及按条件取值的方法详解
Nov 06 Python
python对于requests的封装方法详解
Jan 03 Python
Python下简易的单例模式详解
Apr 08 Python
Pandas 缺失数据处理的实现
Nov 04 Python
Python中文分词库jieba,pkusegwg性能准确度比较
Feb 11 Python
python3用urllib抓取贴吧邮箱和QQ实例
Mar 10 Python
pycharm 如何查看某一函数源码的快捷键
May 12 Python
Python中zipfile压缩包模块的使用
May 14 Python
Python Django模型详解
Oct 05 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 curl 获取响应的状态码的方法
2014/01/13 PHP
php设置session值和cookies的学习示例
2014/03/21 PHP
php保存信息到当前Session的方法
2015/03/16 PHP
php类自动加载器实现方法
2015/07/28 PHP
thinkPHP框架实现多表查询的方法
2018/06/14 PHP
跟随鼠标旋转的文字
2006/11/30 Javascript
JavaScript 开发规范要求(图文并茂)
2010/06/11 Javascript
location.href 在IE6中不跳转的解决方法与推荐使用代码
2010/07/08 Javascript
初窥JQuery(一)jquery选择符 必备知识点
2010/11/25 Javascript
js禁止小键盘输入数字功能代码
2011/08/01 Javascript
防止xss和sql注入:JS特殊字符过滤正则
2013/04/18 Javascript
js中浮点型运算BUG的解决方法说明
2014/01/06 Javascript
每天一篇javascript学习小结(String对象)
2015/11/18 Javascript
在JavaScript中call()与apply()区别
2016/01/22 Javascript
vue axios同步请求解决方案
2017/09/29 Javascript
深入理解vue-class-component源码阅读
2019/02/18 Javascript
Vue开发中遇到的跨域问题及解决方法
2020/02/11 Javascript
JS原形与原型链深入详解
2020/05/09 Javascript
Python字符编码判断方法分析
2016/07/01 Python
python strip() 函数和 split() 函数的详解及实例
2017/02/03 Python
Python面向对象编程基础解析(一)
2017/10/26 Python
使用11行Python代码盗取了室友的U盘内容
2018/10/23 Python
python3.6下Numpy库下载与安装图文教程
2019/04/02 Python
python求最大值,不使用内置函数的实现方法
2019/07/09 Python
pytorch 限制GPU使用效率详解(计算效率)
2020/06/27 Python
解决Keras TensorFlow 混编中 trainable=False设置无效问题
2020/06/28 Python
python字典通过值反查键的实现(简洁写法)
2020/09/30 Python
Python列表元素删除和remove()方法详解
2021/01/04 Python
德国柯吉澳趣味家居:Koziol
2017/08/24 全球购物
英国花园、DIY、电器和家居用品商店:Robert Dyas
2019/03/18 全球购物
法国隐形眼镜网站:VisionDirect.fr
2020/03/03 全球购物
房产委托公证书样本
2014/04/04 职场文书
节能宣传周活动总结
2014/05/08 职场文书
银行求职信范文怎么写
2015/03/20 职场文书
小学体育教学随笔
2015/08/14 职场文书
SpringBoot整合minio快速入门教程(代码示例)
2022/04/03 Java/Android