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读取网页内容的方法
Jul 30 Python
python解决pandas处理缺失值为空字符串的问题
Apr 08 Python
对python中的logger模块全面讲解
Apr 28 Python
flask框架中勾子函数的使用详解
Aug 01 Python
用python生成1000个txt文件的方法
Oct 25 Python
Python 文本文件内容批量抽取实例
Dec 10 Python
我用Python抓取了7000 多本电子书案例详解
Mar 25 Python
PyQt 图解Qt Designer工具的使用方法
Aug 06 Python
Python 分发包中添加额外文件的方法
Aug 16 Python
Python数据处理篇之Sympy系列(五)---解方程
Oct 12 Python
python isinstance函数用法详解
Feb 13 Python
Python优秀开源项目Rich源码解析的流程分析
Jul 06 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采集文章中的图片获取替换到本地(实现代码)
2013/07/08 PHP
分享下页面关键字抓取components.arrow.com站点代码
2014/01/30 PHP
PHP进阶学习之Geo的地图定位算法详解
2019/06/19 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
2020/02/21 PHP
JavaScript 利用Cookie记录用户登录信息
2009/12/08 Javascript
一个js的tab切换效果代码[代码分离]
2010/04/11 Javascript
javascript 事件绑定问题
2011/01/01 Javascript
js流动式效果显示当前系统时间
2016/05/16 Javascript
使用jQuery的load方法设计动态加载及解决被加载页面js失效问题
2017/03/01 Javascript
Vue配合iView实现省市二级联动的示例代码
2018/07/27 Javascript
JavaScript new对象的四个过程实例浅析
2018/07/31 Javascript
关于在vue 中使用百度ueEditor编辑器的方法实例代码
2018/09/14 Javascript
vue引入微信sdk 实现分享朋友圈获取地理位置功能
2019/07/04 Javascript
优雅的使用javascript递归画一棵结构树示例代码
2019/09/22 Javascript
详解Vue 单文件组件的三种写法
2020/02/19 Javascript
微信小程序实现菜单左右联动
2020/05/19 Javascript
[38:44]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第二局
2016/02/25 DOTA
Python数组定义方法
2016/04/13 Python
Python 探针的实现原理
2016/04/23 Python
Python中easy_install 和 pip 的安装及使用
2017/06/05 Python
python计算两个地址之间的距离方法
2018/06/09 Python
Python3 获取一大段文本之间两个关键字之间的内容方法
2018/10/11 Python
pyenv与virtualenv安装实现python多版本多项目管理
2019/08/17 Python
详解用Python进行时间序列预测的7种方法
2020/03/13 Python
HTML5单页面手势滑屏切换原理分析
2017/07/10 HTML / CSS
Sunglasses Shop瑞典:欧洲领先的太阳镜网上商店
2018/04/22 全球购物
美国在线眼镜店:GlassesShop
2018/11/15 全球购物
Surfdome西班牙:世界上最受欢迎的生活方式品牌
2019/02/13 全球购物
程序员跳槽必看面试题总结
2013/06/28 面试题
银行介绍信范文
2014/01/10 职场文书
优秀志愿者事迹材料
2014/02/03 职场文书
单位授权委托书范本
2014/09/26 职场文书
在宿舍喝酒的检讨书
2014/09/28 职场文书
护士长2014年终工作总结
2014/11/11 职场文书
修改并编译golang源码的操作步骤
2021/07/25 Golang
零基础学java之带参数以及返回值的方法
2022/04/10 Java/Android