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实现Linux下守护进程的编写方法
Aug 22 Python
Python Django使用forms来实现评论功能
Aug 17 Python
Python基于socket模块实现UDP通信功能示例
Apr 10 Python
Python2.7 实现引入自己写的类方法
Apr 29 Python
对python同一个文件夹里面不同.py文件的交叉引用方法详解
Dec 15 Python
解决pyinstaller打包pyqt5的问题
Jan 08 Python
浅谈Python中的可迭代对象、迭代器、For循环工作机制、生成器
Mar 11 Python
TensorFlow卷积神经网络之使用训练好的模型识别猫狗图片
Mar 14 Python
Python将列表数据写入文件(txt, csv,excel)
Apr 03 Python
Pandas库之DataFrame使用的学习笔记
Jun 21 Python
python中关于数据类型的学习笔记
Jul 19 Python
利用Python将list列表写入文件并读取的方法汇总
Mar 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
咖啡界又出新概念,无需咖啡豆的分子咖啡
2021/03/03 咖啡文化
PHP 高手之路(三)
2006/10/09 PHP
动态生成gif格式的图像要注意?
2006/10/09 PHP
mac os快速切换多个PHP版本的方法
2017/03/07 PHP
php获取linux命令结果的实例
2017/03/13 PHP
浅谈关于PHP解决图片无损压缩的问题
2017/09/01 PHP
js获取URL的参数的方法(getQueryString)示例
2013/09/29 Javascript
jtable列中自定义button示例代码
2013/11/21 Javascript
php+ajax+jquery实现点击加载更多内容
2015/05/03 Javascript
javascript生成不重复的随机数
2015/07/17 Javascript
JavaScript如何获取数组最大值和最小值
2015/11/18 Javascript
Javascript原型链的原理详解
2016/01/05 Javascript
Bootstrap3 内联单选和多选框
2016/12/29 Javascript
微信小程序的分类页面制作
2017/06/27 Javascript
vue.js $refs和$emit 父子组件交互的方法
2017/12/20 Javascript
js 实现复选框只能选择一项的示例代码
2018/01/23 Javascript
JS运动特效之任意值添加运动的方法分析
2018/01/24 Javascript
Nodejs 和 Electron ubuntu下快速安装过程
2018/05/04 NodeJs
Python3字符串学习教程
2015/08/20 Python
详解使用Python处理文件目录的相关方法
2015/10/16 Python
Python获取文件所在目录和文件名的方法
2017/01/12 Python
Mac 上切换Python多版本
2017/06/17 Python
Python文件操作基本流程代码实例
2017/12/11 Python
Python实现可设置持续运行时间、线程数及时间间隔的多线程异步post请求功能
2018/01/11 Python
python使用tensorflow保存、加载和使用模型的方法
2018/01/31 Python
Python实现按中文排序的方法示例
2018/04/25 Python
连接pandas以及数组转pandas的方法
2019/06/28 Python
python下的opencv画矩形和文字注释的实现方法
2019/07/09 Python
基于Python脚本实现邮件报警功能
2020/05/20 Python
Python xmltodict模块安装及代码实例
2020/10/05 Python
J2SDK1.5与J2SDK5.0有什么区别
2012/09/19 面试题
自我管理的活动方案
2014/08/25 职场文书
幼儿园安全教育随笔
2015/08/14 职场文书
Python 如何安装Selenium
2021/05/06 Python
redis使用不当导致应用卡死bug的过程解析
2021/07/01 Redis
Python装饰器的练习题
2021/11/23 Python