
- 对 象
- 文本框,密码框等
- 控件分类
- Button Objx,Input Pro等
- 作 用
- 采集数据
- 中文名
- 表单
- 组 成
- 表单标签、表单域、表单按钮
- 外文名
- Form
-
2021-11-29 14:40:55
表单
Django 提供了一个丰富的框架来帮助创建表单和处理表单数据。
一、基础:
1.概览
Django提供了一系列的工具和库来帮助您构建表单来接收网站访客的输入,然后处理以及响应这些输入。
HTML表单
在HTML中,表单是在 … 中的一些元素,它允许访客做一些类似输入文本、选择选项、操作对象或空间等动作,然后发送这些信息到服务端。一些表单界面元素(文本框或复选框)内置在HTML中。其他会更复杂些;像弹出日期选择或者允许您移动滑块或者操作控件,一般通过使用JavaScript,CSS以及HTML表单中的 元素来实现这些效果。
和它的元素 一样,表单必须指定两样东西:
何地:负责响应用户输入数据的URL地址
如何:数据请求使用的HTTP方法。
例如,Django admin的登录表单包含了一些 元素:用户名用 type=“text” ,密码用 type=“password” ,登录按钮用 type=“submit” 。它还包含一些用户看不到的隐藏文本字段,Django用它们来决定下一步行为。它还告诉浏览器表单数据应该发往 的 action 属性指定的URL—— /admin/ ,并且应该使用它的 method 属性指定的HTTP方法—— post 。
当 元素被触发的时候,数据会发送到 /admin/ 。
GET 和 POST
处理表单时只会用到 GET 和 POST 两种HTTP方法。
Django的登录表单使用 POST 方法传输数据,在这个方法中浏览器会封装表单数据,为了传输会进行编码,然后发送到服务端并接收它的响应。
相比之下,GET 方法将提交的数据捆绑到一个字符串中,并用它来组成一个URL。该URL包含了数据要发送的地址以及一些键值对应的数据。如果您在Django文档中进行一次搜索,就会看到这点,它会生成一个形似 https://docs.djangoproject.com/search/?q=forms&release=1 的URL。
GET 和 POST 通常用于不同的目的。
任何可能用于更改系统状态的请求应该使用 POST —— 比如一个更改数据库的请求。GET 应该只被用于不会影响系统状态的请求。
GET 方法也不适合密码表单,因为密码会出现在URL中,于是也会出现在浏览器的历史记录以及服务器的日志中,而且都是以纯文本的形式。它也不适合处理大量的数据或者二进制数据,比如一张图片。在WEB应用的管理表单中使用 GET 请求具有安全隐患:攻击者很容易通过模拟请求来访问系统的敏感数据。 POST 方法通过与其他像Django的 CSRF protection 这样的保护措施配合使用,能对访问提供更多的控制。
另一方面, GET 方法适用于诸如网页搜索表单这样的内容,因为这类呈现为一个 GET 请求的URL很容易被存为书签、分享或重新提交。
构建一张表单
<form action="/your-name/" method="post"> <label for="your_name">Your name: </label> <input id="your_name" type="text" name="your_name" value="{{ current_name }}"> <input type="submit" value="OK"> </form>
2.表单 API
绑定和非绑定表单
一个 Form 实例要么是 绑定 到一组数据,要么是 未绑定。
如果是 绑定 了一组数据,它就能够验证这些数据,并将表单渲染成 HTML,并在 HTML 中显示数据。
如果是 未绑定,它就不能进行验证(因为没有数据可验证!),但它仍然可以将空白表单渲染为 HTML。class Form
要创建一个未绑定的 Form 实例,实例化类:>>> f = ContactForm()
要将数据绑定到表单中,将数据以字典的形式传递给你的 Form 类构造函数的第一个参数:
>>> data = {'subject': 'hello', ... 'message': 'Hi there', ... 'sender': 'foo@example.com', ... 'cc_myself': True} >>> f = ContactForm(data)
Form.is_bound
如果你需要在运行时区分绑定和未绑定的表单实例,请检查表单的 is_bound 属性的值:
>>> f = ContactForm() >>> f.is_bound False >>> f = ContactForm({'subject': 'hello'}) >>> f.is_bound True
3.内建字段
表单字段
class Field(**kwargs)
当你创建一个 Form 类时,最重要的部分是定义表单的字段。每个字段都有自定义的验证逻辑,以及其他一些钩子。
Field.clean(value)
虽然你使用 Field 类的主要方式是在 Form 类中,但你也可以将它们实例化并直接使用,以更好地了解它们的工作方式。每个 Field 实例都有一个 clean() 方法,它接收一个参数,并引发一个 django.core.exceptions.ValidationError 异常或返回干净的值:
>>> from django import forms >>> f = forms.EmailField() >>> f.clean('foo@example.com') 'foo@example.com' >>> f.clean('invalid email address') Traceback (most recent call last): ... ValidationError: ['Enter a valid email address.']
4.内建部件
部件
部件是 Django 对 HTML 输入元素的表示。部件处理 HTML 的渲染,以及从对应于部件的 GET/POST 字典中提取数据。
内置部件生成的 HTML 使用 HTML5 语法,目标是 。例如,它使用布尔属性,如 checked 而不是 XHTML 风格的 checked=‘checked’。
为一个字段使用不同的部件,你可以在字段定义中使用 widget 参数。例如:
from django import forms class CommentForm(forms.Form): name = forms.CharField() url = forms.URLField() comment = forms.CharField(widget=forms.Textarea)
二、进阶:
1.针对模型的表单
从模型创建表单
ModelForm class ModelForm
如果您正在构建一个数据库驱动的应用程序,那么您很有可能会用到与Django模型密切相关的表单。例如,您可能有一个 BlogComment 模型,并且您想创建一个让用户提交评论的表单。在这种情况下,在表单中定义字段类型是多余的,因为您已经在模型中定义了字段。
因此,Django 提供了一个辅助类让你可以从一个 Django 模型创建一个 Form 类。
例如:
>>> from django.forms import ModelForm >>> from myapp.models import Article # Create the form class. >>> class ArticleForm(ModelForm): ... class Meta: ... model = Article ... fields = ['pub_date', 'headline', 'content', 'reporter'] # Creating a form to add an article. >>> form = ArticleForm() # Creating a form to change an existing article. >>> article = Article.objects.get(pk=1) >>> form = ArticleForm(instance=article)
2.整合媒体
表单资源( Media 类)
要渲染一个有吸引力且易于使用的Web表单不仅仅需要HTML,还需要CSS样式表,如果您想使用多样的 “Web2.0” 组件,您还需要在每个页面上包含一些JavaScript。要在任何给定模板上准确组合CSS和JavaScript取决于此页面上使用的组件。
这是资源定义的来源。Django允许你将不同的文件(像样式表和脚本)与需要这些资源的表单和组件进行关联。例如,如果您想用日历来渲染DateFields,你可以自定义一个日历组件。然后这个组件可以与渲染日历所需的CSS和JavaScript相关联。在表单上使用日历组件时,Django能够识别所需的CSS和JavaScript文件,并提供表单中的文件名列表,合适地插入到你的网页中。
资源作为静态定义
定义资源最简单方法是静态定义。要使用这种方法,声明是一个内部的 Media 类。此内部类的属性定义了这个需求。
这有个例子:
from django import forms class CalendarWidget(forms.TextInput): class Media: css = { 'all': ('pretty.css',) } js = ('animations.js', 'actions.js')
3.表单集
class BaseFormSet
formset是一个抽象层,它可以在同一页面上处理多个表单的。它最适合被比喻成网格数据。我们假设您有以下表单:
>>> from django import forms >>> class ArticleForm(forms.Form): ... title = forms.CharField() ... pub_date = forms.DateField()
您可能想允许用户一次创建多篇文章。 要创建一个 ArticleForm 的formset,您可以这样做:
>>> from django.forms import formset_factory >>> ArticleFormSet = formset_factory(ArticleForm)
你现在已经创建了一个名为 ArticleFormSet 的表单集。实例化表单集让你能够迭代表单集中的表单,并像常规表单一样显示它们:
>>> formset = ArticleFormSet() >>> for form in formset: ... print(form.as_table()) <tr><th><label for="id_form-0-title">Title:</label></th><td><input type="text" name="form-0-title" id="id_form-0-title"></td></tr> <tr><th><label for="id_form-0-pub_date">Pub date:</label></th><td><input type="text" name="form-0-pub_date" id="id_form-0-pub_date"></td></tr>
如你所见,它只显示一个空表单。显示的空表单数量由 额外 参数控制。默认情况下,formset_factory() 定义了一个额外表单;下面的例子将创建一个表单集类来显示两个空白表单:
>>> ArticleFormSet = formset_factory(ArticleForm, extra=2)
遍历 formset 将按照它们创建的顺序渲染表单。你可以通过为 iter() 方法提供替代的实现来改变这个顺序。
表单集也可以被索引然后返回对应的表单。如果您已经覆盖了 iter ,则还需覆盖 getitem 让它具备匹配行为。
4.自定义验证
表单和字段验证
表单验证发生在清理数据的时候。如果你想自定义这个过程,有各种地方可以进行更改,每个地方都有不同的目的。在表单处理过程中会运行三种类型的清理方法。这些方法通常在调用表单上的 is_valid() 方法时执行。还有其他一些事情也可以触发清理和验证(访问 errors 属性或直接调用 full_clean()),但通常不需要。
一般来说,任何清理方法都可以在处理的数据出现问题时引发 ValidationError,将相关信息传递给 ValidationError 构造函数。 参见下文 关于引发 ``ValidationError` 的最佳实践。如果没有引发 ValidationError,该方法应该将清理后(规范化)的数据作为 Python 对象返回。
大多数验证可以使用 validators —— 可以重复使用的辅助功能来完成。验证器是函数(或可调用对象),它只接受一个参数,并在无效输入时引发 ValidationError。验证器在字段的 to_python 和 validate 方法被调用后运行。
为构造函数提供一个描述性错误 code:
Good
ValidationError(_('Invalid value'), code='invalid')
Bad
ValidationError(_('Invalid value'))
不要在信息中强行加入变量;使用占位符和构造函数的 params 参数:
Good
ValidationError( _('Invalid value: %(value)s'), params={'value': '42'}, )
Bad
ValidationError(_('Invalid value: %s') % value)
使用映射键代替位置格式化。这样可以在重写信息时,将变量按任何顺序排列或完全省略:
Good
ValidationError( _('Invalid value: %(value)s'), params={'value': '42'}, )
Bad
ValidationError( _('Invalid value: %s'), params=('42',), )
用 gettext 包装信息,以启用翻译:
Good
ValidationError(_('Invalid value'))
Bad
ValidationError('Invalid value')
把它放在一起:
raise ValidationError( _('Invalid value: %(value)s'), code='invalid', params={'value': '42'}, )
更多相关内容 -
form表单
2021-09-02 15:05:03form表单详解form表单form表单简介form表单属性acceptaccept-charsetactionautocompleteenctypemethodnamenovalidatetargetHTML 表单输入元素文本域(Text Fields)密码字段单选按钮(Radio Buttons)复选框...form表单详解
form表单
表单在Web网页中用以让访问者输入数据,当提交表单时,表单中输入的数据被打包传递给Web服务器端的程序以处理,从而使得Web服务器与用户之间具有交互功能。
表单实现前后台交互:用户将表单提交到后台再右后台提交到数据库的过程,实现前后端交互。
表单在网页中主要负责数据采集功能,它用< form >标签定义。用户输入的信息都要包含在form标签中,点击提交后,< form >和</ form >里面包含的数据将被提交到服务器或者电子邮件里。
所有的用户输入内容的地方都用表单来写,如登录注册、搜索框。
form表单简介
表单是由窗体和控件组成的,一个表单一般应该包含用户填 写信息的输入框,提交按钮等,这些输入框,按钮叫做控件,表单很像容器,它能够容纳各种各样的控件。
表单标签的格式:
< form action="url" method=get|post name=“myform” >< /form >- name:表单提交时的名称
- action:提交到的地址
- method:提交方式,默认为get
post和get区别:
- 数据提交方式,get把提交的数据url可以看到,post看不到
- get一般用于提交少量数据,post用来提交大量数据
- get最多提交2kb数据,post理论上没有限制
- get提交的数据在浏览器历史记录中,安全性不好
一个完整的表单包含三个基本组成部分
- 表单标签
是指< form >标签本身,它是一个包含表单元素的区域,使用< form >< /form >定义 - 表单域
是< form >标签中用来收集用户输入的每一项,通常用input标签来定义,input标签有不同的类型,用以对用用户不同的数据(比如:文本域、下拉列表、单选框、复选框等等) - 表单按钮
用来提交< form >表单中所有信息到服务器
*表单域和表单按钮都属于表单元素
form表单属性
form支持HTML的全局属性
属性 值 描述 accept MIME_type HTML5 不支持。规定服务器接收到的文件的类型(文件是通过文件上传提交的) accept-charset character_set 规定服务器可处理的表单数据字符集 action URL 规定当提交表单时向何处发送表单数据 autocomplete on / off 规定是否启用表单的自动完成功能 enctype application / x-www-form-urlencoded
multipart / form-data
text / plain规定在向服务器发送表单数据之前如何对其进行编码(适用于 method=“post” 的情况) method get / post 规定用于发送表单数据的 HTTP 方法 name text 规定表单的名称 target _blank
_self
_parent
_top规定在何处打开 action URL accept
已弃用
accept-charset
定义和用法: accept-charset 属性规定服务器用哪种字符集处理表单数据。
语法:<form accept-charset="value" >
常用值:
- UTF-8 - Unicode 字符编码
- ISO-8859-1 - 拉丁字母表的字符编码
- gb2312 - 简体中文字符集
服务器可处理的一个或多个字符集。如需规定一个以上的字符集,请使用逗号来分隔各字符集。
理论上讲,可使用任何字符编码,但没有浏览器可以理解所有的编码。字符编码使用得越广泛,浏览器对其支持越好。
action
定义和用法: 必需的 action 属性规定当提交表单时,向何处发送表单数据。
语法:<form action="value">
常用值:
- 绝对 URL - 指向其他站点(比如 src=“www.example.com/example.htm”)
- 相对 URL - 指向站点内的文件(比如 src=“example.htm”
autocomplete
定义和用法: autocomplete 属性规定表单是否应该启用自动完成功能。自动完成允许浏览器预测对字段的输入。当用户在字段开始键入时,浏览器基于之前键入过的值,应该显示出在字段中填写的选项。autocomplete 属性适用于 < form>,以及下面的 < input> 类型:text, search, url, telephone, email, password, datepickers, range 以及 color。
语法:<form autocomplete="on|off">
常用值:
- on 默认。规定启用自动完成功能。
- off 规定禁用自动完成功能。
enctype
定义和用法: enctype 属性规定在将表单数据发送到服务器之前如何对其进行编码。( 只有 method=“post” 时才使用 enctype 属性。 )
语法:<form enctype="value">
常用值:
- application/x-www-form-urlencoded 默认。在发送前对所有字符进行编码(将空格转换为 “+” 符号,特殊字符转换为 ASCII HEX 值,窗体数据被编码为名称/值对。这是标准的编码格式。 。
- multipart/form-data 不对字符编码。当使用有文件上传控件的表单时,该值是必需的,窗体数据被编码为一条消息,页上的每个控件对应消息中的一个部分。
- text/plain 将空格转换为 “+” 符号,但不编码特殊字符,窗体数据以纯文本形式进行编码,其中不含任何控件或格式字符。
method
定义和用法: method 方法规定如何发送表单数据(form-data)(表单数据会被发送到在 action 属性中规定的页面中)。
表单数据可被作为 URL 变量的形式来发送(method=“get”)或者作为 HTTP post 事务的形式来发送(method=“post”)。
-
关于 GET 的注释:
将表单数据以名称/值对的形式附加到 URL 中
URL 的长度是有限的(大约 3000 字符)
绝不要使用 GET 来发送敏感数据!(在 URL 中是可见的)
对于用户希望加入书签的表单提交很有用
GET 更适用于非安全数据,比如在 Google 中查询字符串 -
关于 POST 的注释:
将表单数据附加到 HTTP 请求的 body 内(数据不显示在 URL 中)
没有长度限制
通过 POST 提交的表单不能加入书签
语法:
<form method="get|post">
常用值:
- get 默认。将表单数据(form-data)以名称/值对的形式附加到 URL 中:URL?name=value&name=value。
- post 以 HTTP post 事务的形式发送表单数据(form-data)。
name
定义和用法: name 属性规定表单的名称。name 属性用于在 JavaScript 中引用元素,或者在表单提交之后引用表单数据。
语法:<form name="text">
常用值:
text 规定表单的名称。novalidate
定义和用法: novalidate 属性是一个布尔属性。
novalidate 属性规定当提交表单时不对表单数据(输入)进行验证。
语法: < form novalidate ="novalidate ">
常用值:- novalidate 如果使用该属性,则提交表单时不进行验证。
target
定义和用法: target 属性规定一个名称或一个关键词,指示在何处打开 action URL,即在何处显示提交表单后接收到的响应。target 属性定义浏览器上下文(比如选项卡、窗口或内联框架)的名称或关键词。
语法:<form target="_blank|_self|_parent|_top|framename">
常用值:
-
_blank 在新窗口/选项卡中打开。
-
_self 同一框架中打开。(默认)
-
_parent 父框架中打开。
-
_top 整个窗口中打开。
-
framename 在指定的 iframe 中打开。
HTML 表单输入元素
多数情况下被用到的表单标签是输入标签()。输入类型是由类型属性(type)定义的。
大多数经常被用到的输入类型如下:文本域(Text Fields)
文本域通过< input type=“text”> 标签来设定,当用户要在表单中键入字母、数字等内容时,就会用到文本域。
<form> <span>First name:<span> <input type="text" name="firstname"><br> <span>Last name:<span/> <input type="text" name="lastname"> </form>
显示效果如下:
表单本身并不可见。同时,在大多数浏览器中,文本域的默认宽度是 20 个字符。密码字段
密码字段通过标签< input type=“password”> 来定义:
<form> <span>Password:<span/> <input type="password" name="pwd"> </form>
显示效果如下:
注意:密码字段字符不会明文显示,而是以星号或圆点替代。单选按钮(Radio Buttons)
< input type=“radio”> 标签定义了表单单选框选项
<form> <input type="radio" name="sex" value="male"><span>Male<span/><br> <input type="radio" name="sex" value="female"><span>Female<span/> </form>
显示效果如下:
复选框(Checkboxes)
< input type=“checkbox”> 定义了复选框. 用户需要从若干给定的选择中选取一个或若干选项。
<form> <input type="checkbox" name="vehicle" value="Bike"><span>I have a bike<span/><br> <input type="checkbox" name="vehicle" value="Car"><span>I have a car<span/> </form>
显示效果如下:
提交按钮(Submit Button)
< input type=“submit”> 定义了提交按钮.
当用户单击确认按钮时,表单的内容会被传送到另一个文件。表单的动作属性定义了目的文件的文件名。由动作属性定义的这个文件通常会对接收到的输入数据进行相关的处理。:<form name="input" action="html_form_action.php" method="get"> <span>Username:<span/> <input type="text" name="user"> <input type="submit" value="Submit"> </form>
fieldset标签
< fieldset> 标签可以将表单内的相关元素分组。
< fieldset> 标签会在相关表单元素周围绘制边框。属性 值 描述 disabled disabled 规定该组中的相关表单元素应该被禁用。 rmNew form_id 规定 fieldset 所属的一个或多个表单。 name text 规定 fieldset 的名称。 实例如下
<form> <fieldset> <legend>Personalia:</legend> Name: <input type="text"><br> Email: <input type="text"><br> Date of birth: <input type="text"> </fieldset> </form>
效果如下
标签
标签作为计算结果输出显示(比如执行脚本的输出)。
<form oninput="x.value=parseInt(a.value)+parseInt(b.value)">0 <input type="range" id="a" value="50">100 +<input type="number" id="b" value="50"> =<output name="x" for="a b"></output> </form>
效果如下
-
form表单详解
2020-07-06 16:02:56form表单详解form表单属性 表单在Web网页中用以让访问者输入数据,当提交表单时,表单中输入的数据被打包传递给Web服务器端的程序以处理,从而使得Web服务器与用户之间具有交互功能。 表单实现前后台交互:用户将...form表单详解
form表单
表单在Web网页中用以让访问者输入数据,当提交表单时,表单中输入的数据被打包传递给Web服务器端的程序以处理,从而使得Web服务器与用户之间具有交互功能。
表单实现前后台交互:用户将表单提交到后台再右后台提交到数据库的过程,实现前后端交互。
表单在网页中主要负责数据采集功能,它用< form >标签定义。用户输入的信息都要包含在form标签中,点击提交后,< form >和</ form >里面包含的数据将被提交到服务器或者电子邮件里。
所有的用户输入内容的地方都用表单来写,如登录注册、搜索框。
form表单简介
表单是由窗体和控件组成的,一个表单一般应该包含用户填 写信息的输入框,提交按钮等,这些输入框,按钮叫做控件,表单很像容器,它能够容纳各种各样的控件。
表单标签的格式:
< form action="url" method=get|post name=“myform” >< /form >- name:表单提交时的名称
- action:提交到的地址
- method:提交方式,默认为get
post和get区别:
- 数据提交方式,get把提交的数据url可以看到,post看不到
- get一般用于提交少量数据,post用来提交大量数据
- get最多提交2kb数据,post理论上没有限制
- get提交的数据在浏览器历史记录中,安全性不好
一个完整的表单包含三个基本组成部分
- 表单标签
是指< form >标签本身,它是一个包含表单元素的区域,使用< form >< /form >定义 - 表单域
是< form >标签中用来收集用户输入的每一项,通常用input标签来定义,input标签有不同的类型,用以对用用户不同的数据(比如:文本域、下拉列表、单选框、复选框等等) - 表单按钮
用来提交< form >表单中所有信息到服务器
*表单域和表单按钮都属于表单元素
form表单属性
form支持HTML的全局属性
属性 值 描述 accept MIME_type HTML5 不支持。规定服务器接收到的文件的类型(文件是通过文件上传提交的) accept-charset character_set 规定服务器可处理的表单数据字符集 action URL 规定当提交表单时向何处发送表单数据 autocomplete on / off 规定是否启用表单的自动完成功能 enctype application / x-www-form-urlencoded
multipart / form-data
text / plain规定在向服务器发送表单数据之前如何对其进行编码(适用于 method=“post” 的情况) method get / post 规定用于发送表单数据的 HTTP 方法 name text 规定表单的名称 target _blank
_self
_parent
_top规定在何处打开 action URL accept
已弃用
accept-charset
定义和用法: accept-charset 属性规定服务器用哪种字符集处理表单数据。
语法:<form accept-charset="value" >
常用值:
- UTF-8 - Unicode 字符编码
- ISO-8859-1 - 拉丁字母表的字符编码
- gb2312 - 简体中文字符集
服务器可处理的一个或多个字符集。如需规定一个以上的字符集,请使用逗号来分隔各字符集。
理论上讲,可使用任何字符编码,但没有浏览器可以理解所有的编码。字符编码使用得越广泛,浏览器对其支持越好。
action
定义和用法: 必需的 action 属性规定当提交表单时,向何处发送表单数据。
语法:<form action="value">
常用值:
- 绝对 URL - 指向其他站点(比如 src=“www.example.com/example.htm”)
- 相对 URL - 指向站点内的文件(比如 src=“example.htm”
autocomplete
定义和用法: autocomplete 属性规定表单是否应该启用自动完成功能。自动完成允许浏览器预测对字段的输入。当用户在字段开始键入时,浏览器基于之前键入过的值,应该显示出在字段中填写的选项。autocomplete 属性适用于 < form>,以及下面的 < input> 类型:text, search, url, telephone, email, password, datepickers, range 以及 color。
语法:<form autocomplete="on|off">
常用值:
- on 默认。规定启用自动完成功能。
- off 规定禁用自动完成功能。
enctype
定义和用法: enctype 属性规定在将表单数据发送到服务器之前如何对其进行编码。( 只有 method=“post” 时才使用 enctype 属性。 )
语法:<form enctype="value">
常用值:
- application/x-www-form-urlencoded 默认。在发送前对所有字符进行编码(将空格转换为 “+” 符号,特殊字符转换为 ASCII HEX 值,窗体数据被编码为名称/值对。这是标准的编码格式。 。
- multipart/form-data 不对字符编码。当使用有文件上传控件的表单时,该值是必需的,窗体数据被编码为一条消息,页上的每个控件对应消息中的一个部分。
- text/plain 将空格转换为 “+” 符号,但不编码特殊字符,窗体数据以纯文本形式进行编码,其中不含任何控件或格式字符。
method
定义和用法: method 方法规定如何发送表单数据(form-data)(表单数据会被发送到在 action 属性中规定的页面中)。
表单数据可被作为 URL 变量的形式来发送(method=“get”)或者作为 HTTP post 事务的形式来发送(method=“post”)。
-
关于 GET 的注释:
将表单数据以名称/值对的形式附加到 URL 中
URL 的长度是有限的(大约 3000 字符)
绝不要使用 GET 来发送敏感数据!(在 URL 中是可见的)
对于用户希望加入书签的表单提交很有用
GET 更适用于非安全数据,比如在 Google 中查询字符串 -
关于 POST 的注释:
将表单数据附加到 HTTP 请求的 body 内(数据不显示在 URL 中)
没有长度限制
通过 POST 提交的表单不能加入书签
语法:
<form method="get|post">
常用值:
- get 默认。将表单数据(form-data)以名称/值对的形式附加到 URL 中:URL?name=value&name=value。
- post 以 HTTP post 事务的形式发送表单数据(form-data)。
name
定义和用法: name 属性规定表单的名称。name 属性用于在 JavaScript 中引用元素,或者在表单提交之后引用表单数据。
语法:<form name="text">
常用值:
text 规定表单的名称。novalidate
定义和用法: novalidate 属性是一个布尔属性。
novalidate 属性规定当提交表单时不对表单数据(输入)进行验证。
语法: < form novalidate ="novalidate ">
常用值:- novalidate 如果使用该属性,则提交表单时不进行验证。
target
定义和用法: target 属性规定一个名称或一个关键词,指示在何处打开 action URL,即在何处显示提交表单后接收到的响应。target 属性定义浏览器上下文(比如选项卡、窗口或内联框架)的名称或关键词。
语法:<form target="_blank|_self|_parent|_top|framename">
常用值:
-
_blank 在新窗口/选项卡中打开。
-
_self 同一框架中打开。(默认)
-
_parent 父框架中打开。
-
_top 整个窗口中打开。
-
framename 在指定的 iframe 中打开。
HTML 表单输入元素
多数情况下被用到的表单标签是输入标签()。输入类型是由类型属性(type)定义的。
大多数经常被用到的输入类型如下:文本域(Text Fields)
文本域通过< input type=“text”> 标签来设定,当用户要在表单中键入字母、数字等内容时,就会用到文本域。
<form> <span>First name:<span> <input type="text" name="firstname"><br> <span>Last name:<span/> <input type="text" name="lastname"> </form>
显示效果如下:
表单本身并不可见。同时,在大多数浏览器中,文本域的默认宽度是 20 个字符。密码字段
密码字段通过标签< input type=“password”> 来定义:
<form> <span>Password:<span/> <input type="password" name="pwd"> </form>
显示效果如下:
注意:密码字段字符不会明文显示,而是以星号或圆点替代。单选按钮(Radio Buttons)
< input type=“radio”> 标签定义了表单单选框选项
<form> <input type="radio" name="sex" value="male"><span>Male<span/><br> <input type="radio" name="sex" value="female"><span>Female<span/> </form>
显示效果如下:
复选框(Checkboxes)
< input type=“checkbox”> 定义了复选框. 用户需要从若干给定的选择中选取一个或若干选项。
<form> <input type="checkbox" name="vehicle" value="Bike"><span>I have a bike<span/><br> <input type="checkbox" name="vehicle" value="Car"><span>I have a car<span/> </form>
显示效果如下:
提交按钮(Submit Button)
< input type=“submit”> 定义了提交按钮.
当用户单击确认按钮时,表单的内容会被传送到另一个文件。表单的动作属性定义了目的文件的文件名。由动作属性定义的这个文件通常会对接收到的输入数据进行相关的处理。:<form name="input" action="html_form_action.php" method="get"> <span>Username:<span/> <input type="text" name="user"> <input type="submit" value="Submit"> </form>
fieldset标签
< fieldset> 标签可以将表单内的相关元素分组。
< fieldset> 标签会在相关表单元素周围绘制边框。属性 值 描述 disabled disabled 规定该组中的相关表单元素应该被禁用。 rmNew form_id 规定 fieldset 所属的一个或多个表单。 name text 规定 fieldset 的名称。 实例如下
<form> <fieldset> <legend>Personalia:</legend> Name: <input type="text"><br> Email: <input type="text"><br> Date of birth: <input type="text"> </fieldset> </form>
效果如下
标签
标签作为计算结果输出显示(比如执行脚本的输出)。
<form oninput="x.value=parseInt(a.value)+parseInt(b.value)">0 <input type="range" id="a" value="50">100 +<input type="number" id="b" value="50"> =<output name="x" for="a b"></output> </form>
效果如下
-
表单格式自动填写小软件
2012-09-15 03:41:22表单自动填写 -填写表格从未如此简单! 自动填充表单是一个完整的解决方案,节省您的时间,自动填写网页表单,自动密码输入(自动填充密码,登录),并提供一个简单的方法来保存网页形式的任何复杂。 下载表格... -
表单式工作流功能模块设计方案
2021-08-26 13:48:41最近一个项目中需要独自设计一个表单式工作流功能模块,在此将整个功能模块的设计思路分享出来。最近一个项目中需要独自设计一个表单式工作流功能模块,在此将整个功能模块的设计思路分享出来。
文章目录
1. 需求及分析
此处所有的需求是建立在医院临床信息管理系统之上的。这里只分析关于表单式工作流功能模块的需求。
关于表单式工作流功能模块的需求全部整理如下:
- 1.一个患者在不同时期要填写的表单不同。
- 2.每个患者的手术类型不同,也就意味着,每个患者的各个时期可能都不相同。
- 3.每个时期需要单独填写多张表单,相同时期要填写表单的相同。
- 4.在每个时期要填写的其中一张表单中,可能一条患者信息对应一条记录,也可能一条患者信息对应多条记录。比如在手术期的一张检查表单中,一条患者信息只对应一条记录,但是术后期的一张检查表单中,可能会有手术后30天的情况,也会有手术后60天的情况,也就是一条患者信息对应多条记录。
- 5.对于某一个患者,要能单独的处理它的工作流(也就是不同时期的表单)。
- 6.对于某一个时期,要能单独处理在这个时期的所有患者信息。
- 7.对每张表单要有增删改查操作,在每个时期,都要能通过各种方式查询患者的信息。
针对这些需求,对整个工作流功能模块初步的想法大概是这个样子:
- 1.每位患者可以绑定一个工作流程,称为表单式的工作流。
- 2.每个流程由若干个节点组成。
- 3.医生在一个时期处理完所有的表单后,点击完成该流程节点即可进入下一流程节点。
- 4.医生还可以修改一个患者已经完成的流程节点的数据,但是无法查看还未达到的流程节点的数据。
2. 功能实现分析
上述要实现的表单式的工作流跟oa系统中的工作流不大一样,oa系统中的工作流一般是这样几个步骤:
- 1.设计流程。上级设计一种办事的流程,其中包含若干个节点,一个节点代表着一个审批人,所有节点审批都通过后才算完成,一个节点不通过,就会被打回。
- 2.发起流程。由普通员工发起一个流程申请,发起后,员工无法修改这张表单,随后这张表单会跟随流程一级一级审批。
- 3.流程审批。有若干上级审批流程,点击审批通过,该表单就会进入下以流程节点,点审批失败,流程会终止或者打回。
- 4.流程通过。所有流程通过之后,会得到流程通过的凭证,就可以拿着这个凭证去处理相关的事情。
整个oa系统的工作流功能的核心就是多级审批机制,但我们需求中的表单式的工作流,并不设计审批机制,整个工作流的功能可以简单理解为:一条患者信息选择流程后会在各个时期不停流动,在一个时期需要填写非常多的表单,这些表单填写完成后,医生点击进入下一流程,患者信息即可进入下一流程,但是这条患者信息已经留在了每个时期的表单中,医生仍然可以查看和修改这条信息。
oa式的工作流的实现非常复杂,市面上也有商业化和开源的工作流框架和引擎,但是针对我们这个需求来看,如果硬加使用,只会使整个业务更加复杂,因此,最好的办法就是自己设计一种简单工作流机制,实现上述全部的需求。
3. 工作流结构设计
根据上面的需求分析和功能实现的分析,设计的整个工作流结构如下:
- 每个工作流包含若干个节点。
- 每个节点包含基本信息和若干个表单。
- 每个患者绑定一个工作流,患者在每个工作流节点需要处理多张表单。
4. 数据库设计
4.1 总设计思路
根据上面的分析,总的设计思路如下:
- 每个不同的时期有一张主表,主要记载患者的id,每当有患者信息到达该节点时,记录患者的id,一共有两种方式记载。两种方式各有好处。综合考虑还是第1种方式最好。
- 1.只记载患者信息的id。
- 2.记载同步记载所有患者信息。
- 不管使用哪种方法,都需要将患者的id作为主表的主键,这样方便查询子表中的信息。
- 如果使用第1种方法,那么每张主表中其实主要就是吧包含主键。但在每个时期,都需要联合患者表一起查询数据。
- 如果使用第2种方法,那么每张主表需要同步患者的所有信息,且不管在哪修改了患者信息,都需要在所有主表同步患者的消息。
- 每个时期的若干小表都是主表的子表,包含该小表需要填写的所有数据字段,外键是主表的id。
- 流程节点表中绑定一张主表。
- 这样设计的好处就是,在每一个流程节点处,还能看到许多该流程节点的其它信息。
- 工作流表绑定若干个流程节点。
- 一个患者绑定一个工作流,并且存储当前节点,下一节点。
4.1 各时期主表设计
各时期的主表主要干的事情就是存储患者信息的id,代表着患者正处于当前流程节点或者已经完成该流程节点。
患者id模式
- 这种模式很简单,基本上不需要什么字段。
字段 说明 id 患者id … 权限管理需要的其它字段 同步所有患者信息模式
- 这种方式需要同步主表的所有字段。
字段 说明 id 患者id … 患者表所有字段 4.2 每个时期的若干小表
存储基本信息,关键是外键是主表的id。
字段 说明 id 唯一id … 所有数据字段 4.3 流程节点表
主要是绑定主表,还可以添加一个时期的额外数据,比如一个时期的表单填写提示。
字段 说明 id 唯一id master_table 主表名称 … 权限控制相关字段 … 该时期的其它数据字段 4.4 工作流表
在工作流表中绑定多个工作节点有两种方式:
- 1.根据最多节点数目设置若干个节点字段,存储流程节点的id。
- 2.设置一个字段,字符串拼接的形式,存储所有流程节点id。
同样,两种方式各有好处:
- 使用第1种方式,需要需求中最多节点个数完全确定,才方便设计合适的字段。
- 使用第2种方式,可以存储任意个节点,但在拿出处理的时候有些麻烦。
一个字段模式
字段 说明 id 唯一id process_name 工作流名称 process_des 工作流描述 process_ndoes 所有节点id … 权限控制相关的其它字段 多个字段模式
- 其中哈希值主要用来工作流判重。
字段 说明 id 唯一id process_name 工作流名称 process_des 工作流描述 node_num 节点数目 process_hash 工作流哈希值 node1 节点1 node2 节点2 node3 节点3 … 若干节点 … 权限控制相关的其它字段 4.5 患者表
患者表中和流程相关的一共三个字段:工作流id,当前节点id,下一节点id。其中存储下一节点id的做法类似单链表。
字段 说明 id 唯一id process_id 工作流id current_node_id 当前节点id next_node_id 下一节点id … 所有数据字段 5.接口设计
5.1 针对工作流节点的接口
-
1.新增工作流节点。
- 需要保证工作流节点所绑定的主表id和名称是唯一的。
-
2.修改工作流节点。
- 如果修改了工作流绑定的主表,先要判断这个节点所在工作流是否被患者绑定,如果绑定了,那么将无法修改主表。
-
3.删除工作流节点。
- 需要保证该节点未绑定任何工作流。
-
4.查询工作流节点。
- 查询该节点的所有数据。
5.2 针对工作流的接口
-
1.新增工作流。
- 需要保证工作流节点不重复,重复就会出错。
- 需要保证节点数大于0.
- 需要保证整条节点链表不重复。
- 如果是多字段模式的,还需要检验是否依次填写节点。
-
2.修改工作流。
- 如果已经有患者绑定了工作流,那么将不能修改工作流的节点。
-
3.删除工作流。
- 如果已经有患者绑定了工作流,那么将不能删除工作流的节点。
-
4.查询工作流。
- 查询工作流的所有字段。
5.3 针对患者的接口
-
CRUD操作略。
-
查询患者流程信息。
- 需要获取患者所处流程的所有节点信息。
- 需要判断哪些节点已经完成,正处于哪个节点,哪些节点还未到达。
-
患者流程通过。
- 患者的信息将会插入下一节点对应的主表。
- 修改患者当前节点,下一节点。
6. 前端页面设计
6.1 针对化患者信息处
- 在操作一栏中能够处理患者的流程。
6.2 患者流程处理处
6.3 具体时期处
7.其它
这种表单式工作流的设计,理论上是可以抽取出来成为一个独立的框架,待日后有时间精力再去尝试。
ATFWUS 2021-08-26
-
低代码平台表单引擎技术方案选型
2022-03-15 13:56:15可视化表单建模是低代码/零代码平台的核心功能,业内对该功能有多种叫法:电子表单、表单可视化、表单驱动、表单引擎等,该组件主要由表单设计器、表单解析引擎、表单存储引擎三个部分构成,而表单解析引擎取决于... -
django2.2-form表单详解
2021-10-14 15:13:50文章目录一、form组件二、form表单的基本语法1. form表单类的书写2. 校验数据3. 渲染表单标签三、展示错误信息1. 展示错误信息2. 自定义错误信息四、钩子函数(HOOK)五、字段参数和类型1. 核心参数`widget`参数`... -
element-plus表单验证使用 个人总结
2021-10-18 09:17:30表单验证能通过设置验证规则验证用户的输入,并对不规范的输入做出对应提示。element-plus(包括element-ui)都提供了表单验证功能。但官网上只有最基本的使用方法,详细使用需要参考async-validator,element-plus... -
antd 表单提交,文件和表单内容一起提交,表单校验
2019-12-19 16:17:06用很简单的源码实现包含下列 antd 表单相关知识: 1.表单必填校验,规则校验 2.Upload 上传图片,获取上传图片的状态,如上传成功,上传失败,上传进度条,删除上传的文件 3.获取 Input 组件用户输入的值,设置... -
form表单、控制器中接收表单提交数据的4种方式
2021-05-18 10:58:32Form表单 这篇文章主要讲的是form表单的提交 之前我们接触过的form表单元素是在Bootstrap框架里面,这次也将用到Bootstrap框架去布局(见图表1)通过Bootstrap框架布局呈现的一个效果,就直接讲form表单提交的... -
【第十九篇】Flowable中的动态表单
2022-04-13 09:57:24有两种使用表单的方法:使用(由表单设计器创建的)表单定义的内置表单渲染,以及外部表单渲染。 使用外部表单渲染时,可以使用(自Explorer web应用V5版本支持的)表单参数;也可以使用表单key定义,引用外部的、... -
表单自动填写,网页自动提交工具
2012-11-06 10:02:04模拟人工提交网页表单操作,同时监控提交结果变化并报警提示或自动处理报警动作。可广泛用于注册表单、登陆表单、信息添加修改表单提交。 1、支持多任务多操作连续提交,实现无人值守。 2、支持通过多代理服务器访问... -
ElementUI实现表单校验
2022-03-28 21:31:571.给表单el-form添加校验规则字段rules并动态绑定一个对象(对象可自定义,我这里定义为rules) 2.在script里面加入rules对象,并将要校验的字段写进去,格式固定 #eg:message的值可以自定义,blur表示表单失去焦点... -
php form表单的提交
2021-04-30 00:40:17PHP表单之在Web页面中插入表单在普通的WEB页面中插入表单是如下的:这里将创建一个比较完整的表单,将中的元素和属性全部基本全部都展示出来。charset="UTF-8"title>indextablewidth="400"border="1... -
Google表单初学者指南
2020-09-18 02:28:11尽管在表单主题方面缺乏自定义功能(除了能够上传标题的任何图像),Google表单还是用它提供的所有其他功能来弥补它。 After you customize your form, close the theme options to return to your survey. 自定义... -
Activiti 动态表单
2019-02-14 10:52:22其中动态表单和外置表单是是Activiti提供的表单机制。 官方手册对表单的阐述 流程由流程参数驱动,Activiti支持复杂的对象(实现serializable接口),JPA实体,XML文档作为流程参数,上述三类... -
使用 HTML 和 CSS 的玻璃态登录表单(含免费完整源码)
2021-09-16 08:37:39在本文中,我将带着大家展示如何使用 HTML 和 CSS 代码创建 玻璃态登录表单。你可以将任何简单的设计转换为玻璃态设计。为此,只需要更改一点代码。首先使用 background-color semi-transparent 比如 rgba (255,255,... -
vue如何实现自定义表单
2019-10-26 20:08:18自定义表单顾名思义就是由用户定义表单,由用户觉定标签和组件,决定要填写什么格式的数据,用过腾讯文档的收集表单的一定见过下面的页面,这就是自定义表单。 自定义表单能做什么? 典型的使用场景是信息收集表单... -
教你如何使用vue轻松构建动态表单
2021-02-16 16:45:02form-create 是一个可以通过 JSON 生成具有动态渲染、数据收集、验证和提交功能的动态表单组件。支持3个UI框架,并且支持生成任何 Vue 组件。内置20种常用表单组件和自定义组件,再复杂的表单都可以轻松搞定。 -
【HTML基础】form表单常用的7种属性和9种元素详解(含在线练习网址)
2022-02-09 20:07:051. 掌握form表单的作用:提交数据。 2. 掌握form表单7种常用属性的作用与语法。 3. 掌握form表单9种常用元素的作用与语法。 -
基于vue的 表单设计器(拖拽生成表单)
2022-03-02 02:47:07日常开发时想要快速构建节省时间或者功能需求需要拖拽生成表单,推荐使用以下表单设计器。 1.基于vue+elementui 的表单设计及代码生成器 Form Generator Element UI表单设计及代码生成器,可将生成的代码直接运行在... -
【vue】element-ui的form数组表单验证(循环表单验证)
2022-03-30 16:01:34基于vue2.0的element-ui的form表单验证比较简单,但是有些同学可能对于数组类型的表单验证无从下手,这里我基于一个我自己项目中的例子,展示一下怎么进行数组的表单验证。 项目截图: 上代码,为了让大家看起来比较... -
jQuery Validate表单验证实例
2016-05-26 07:52:31实例是用jQuery的validate插件做的登陆表单的验证,效果还不错,代码部分可以参见我写的这篇博客:http://blog.csdn.net/eson_15/article/details/51497533 -
HTML 表单制作
2019-09-19 20:36:11表单是一个包含表单元素的区域 表单元素是允许用户在表单中输入内容, 比如:文本域(textarea)、下拉列表、单选框(radio-buttons)、复选框(checkboxes)等等 表单使用表单标签 来设置 HTML 表单-输入元素 多数... -
ant-design-vue 表单验证和 validator 自定义表单验证
2021-02-08 17:17:54在ant-design-vue中,提供FormModel表单组件,且支持v-model数据绑定,同时可以校验和提交功能的表单。 一、表单验证 <a-form-model ref="form" :rules="rules" :model="form" layout="inline" :label-... -
003_用户注册表单【HTML-form表单】
2020-07-07 11:45:36文章目录一、HTML-form表单1、用户注册表单2、用户注册表单 - 小升级 一、HTML-form表单 1、用户注册表单 <... <head> <meta charset="UTF-8">...HTML用户注册表单<... (表单展示后,用户填写表. -
Web表单设计:点石成金的艺术.pdf
2013-04-21 01:54:03Web表单设计:点石成金的艺术.pdf -
jQuery实现表单验证
2019-04-24 22:13:351.基于html表单,利用jQuery实现表单验证功能。 2.html基本结构和样式: 3.html代码: <!DOCTYPE ...