表单
HTML 表单用于收集用户的输入信息。
HTML 表单表示文档中的一个区域,此区域包含交互控件,将用户收集到的信息发送到 Web 服务器。
HTML 表单通常包含各种输入字段、复选框、单选按钮、下拉列表等元素。
以下是一个简单的HTML表单的例子:
<form>
元素用于创建表单,action
属性定义了表单数据提交的目标 URL,method
属性定义了提交数据的 HTTP 方法(这里使用的是 "post")。<label>
元素用于为表单元素添加标签,提高可访问性。<input>
元素是最常用的表单元素之一,它可以创建文本输入框、密码框、单选按钮、复选框等。type
属性定义了输入框的类型,id
属性用于关联<label>
元素,name
属性用于标识表单字段。<select>
元素用于创建下拉列表,而<option>
元素用于定义下拉列表中的选项。
表单是一个包含表单元素的区域。
表单元素是允许用户在表单中输入内容,比如:文本域(textarea)、下拉列表(select)、单选框(radio-buttons)、复选框(checkbox) 等等。
我们可以使用 <form> 标签来创建表单:
<form action="/" method="post">
<!-- 文本输入框 -->
<label for="name">用户名:</label>
<input type="text" id="name" name="name" required>
<br>
<!-- 密码输入框 -->
<label for="password">密码:</label>
<input type="password" id="password" name="password" required>
<br>
<!-- 单选按钮 -->
<label>性别:</label>
<input type="radio" id="male" name="gender" value="male" checked>
<label for="male">男</label>
<input type="radio" id="female" name="gender" value="female">
<label for="female">女</label>
<br>
<!-- 复选框 -->
<input type="checkbox" id="subscribe" name="subscribe" checked>
<label for="subscribe">订阅推送信息</label>
<br>
<!-- 下拉列表 -->
<label for="country">国家:</label>
<select id="country" name="country">
<option value="cn">CN</option>
<option value="usa">USA</option>
<option value="uk">UK</option>
</select>
<br>
<!-- 提交按钮 -->
<input type="submit" value="提交">
</form>
用Flask获取表单:
你可以通过对应的后端框架来获取这个表单的内容,下面用Py的Flask来举例子。下面创建一个py文件,同目录下创建一个名叫templates的文件夹。
HTML 文件保存在 templates
文件夹中,命名为 test.html
。Flask 默认会在 templates
文件夹中查找 HTML 文件。
from flask import Flask, request, render_template # 导入 Flask 框架及其所需的模块
app = Flask(__name__) # 创建 Flask 应用实例
@app.route('/', methods=['GET', 'POST']) # 定义路由,支持 GET 和 POST 请求
def form(): # 定义处理表单的视图函数
if request.method == 'POST': # 检查请求方法是否为 POST
# 获取表单数据
name = request.form.get('name') # 获取用户名
password = request.form.get('password') # 获取密码
gender = request.form.get('gender') # 获取性别
subscribe = request.form.get('subscribe') # 获取订阅复选框值,可能不存在
country = request.form.get('country') # 获取国家
# 处理获取的数据,例如返回显示
return f'''
<h1>提交的信息:</h1>
<p>用户名: {name}</p> # 显示用户名
<p>密码: {password}</p> # 显示密码
<p>性别: {gender}</p> # 显示性别
<p>订阅推送信息: {"是" if subscribe else "否"}</p> # 判断订阅状态并显示
<p>国家: {country}</p> # 显示选择的国家
'''
# 如果是 GET 方法,渲染表单
return render_template('test.html') # 返回表单的 HTML 模板
if __name__ == '__main__': # 判断是否作为主程序运行
app.run(debug=True) # 启动 Flask 应用,并开启调试模式
注意:在 Python 代码中,获取表单数据的部分是通过 request.form.get('field_name')
来实现的,其中 field_name
对应于 HTML 表单中各个输入元素的 name
属性。
如:
用户名:
- Python:
name = request.form.get('name')
- HTML:
<input type="text" id="name" name="name" required>
HTML 表单 - 输入元素
多数情况下被用到的表单标签是输入标签 <input>。
输入类型是由 type 属性定义。
接下来我们介绍几种常用的输入类型。
文本域(Text Fields)
文本域通过 <input type="text"> 标签来设定,当用户要在表单中键入字母、数字等内容时,就会用到文本域。
<form>
First name: <input type="text" name="firstname"><br>
Last name: <input type="text" name="lastname">
</form>
注意:表单本身并不可见。同时,在大多数浏览器中,文本域的默认宽度是 20 个字符。
密码字段
密码字段通过标签 <input type="password"> 来定义:
<form>
Password: <input type="password" name="pwd">
</form>
注意:密码字段字符不会明文显示,而是以星号 * 或圆点 . 替代。
单选按钮(Radio Buttons)
<input type="radio"> 标签定义了表单的单选框选项:
<form action="">
<input type="radio" name="sex" value="male">男<br>
<input type="radio" name="sex" value="female">女<br>
<input type="radio" name="sex" value="Agender">无性别<br>
<input type="radio" name="sex" value="Lesbian">女同<br>
<input type="radio" name="sex" value="Gay">男同<br>
<input type="radio" name="sex" value="Bisexual">两性恋<br>
<input type="radio" name="sex" value="Transgender">跨性别者<br>
<input type="radio" name="sex" value="111">武装直升机
</form>
复选框(Checkboxes)
<input type="checkbox"> 定义了复选框。
复选框可以选取一个或多个选项:
<form>
<input type="checkbox" name="vehicle[]" value="Bike">我喜欢自行车<br>
<input type="checkbox" name="vehicle[]" value="Car">我喜欢小汽车
</form>
提交按钮(Submit)
<input type="submit"> 定义了提交按钮。
当用户单击确认按钮时,表单的内容会被传送到服务器。表单的动作属性 action 定义了服务端的文件名。
action 属性会对接收到的用户输入数据进行相关的处理:
<form name="input" action="html_form_action.php" method="get">
Username: <input type="text" name="user">
<input type="submit" value="Submit">
</form>
选择框
如何使用隐藏在下拉列表中的默认空白值实现SELECT标记
只需使用禁用和/或隐藏属性:
<form>
<select>
<option selected disabled hidden style="display: none" value=""></option>
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="fiat">Fiat</option>
<option value="audi">Audi</option>
</select>
</form>
- selected:使此选项成为默认选项。
- disabled:使此选项无法点击。
- style="display:none":使此选项不在旧版浏览器中显示。
- hidden:使此选项不显示在下拉列表中。
<label>标签
我最前面的实例中比后面单独的例子多了
<label>标签。
将一个 <label>
和一个 <input> 元素相关联主要有这些优点:
- 标签文本不仅与其相应的文本输入元素在视觉上相关联,程序中也是如此。这意味着,当用户聚焦到这个表单输入元素时,屏幕阅读器可以读出标签,让使用辅助技术的用户更容易理解应输入什么数据。
- 你可以点击关联的标签来聚焦或者激活这个输入元素,就像直接点击输入元素一样。这扩大了元素的可点击区域,让包括使用触屏设备在内的用户更容易激活这个元素。
将一个 <label>
和一个 <input>
元素匹配在一起,你需要给 <input>
一个 id
属性。而 <label>
需要一个 for
属性,其值和 <input>
的 id
一样。
另外,也可以将 <input>
直接放在 <label>
里,此时则不需要 for
和 id
属性,因为关联已隐含存在。