web表单

1.表单介绍

表单通常用来收集网页访问者信息,常见的表单比如搜索引擎的搜索框、各网页应用的注册或者登陆界面等。一个表单通常包括多个表单控件,一些常用的表单控件如下:

添加文本控件:单行文本框、密码框、多行文本框(文本域)

选择控件:单选按钮、复选框、下拉列表

上传文件控件

提交表单控件:提交按钮、图像按钮

html5还加入了日期控件、电子邮件和URL输入控件、搜索输入控件。

下表列出了一些表单控件的元素以及部分属性,元素属性中name和对应的数据会成对地发到服务器,所以大部分控件需要设置name属性。

表单控件
控件名字元素部分元素元素特性
单行文本框<input type="text">name,maxlength
密码框<input type="password">name,size,maxlength
文本域<textarea>name
单选按钮<input type=ratio>name,value(发送到服务器的值),checked(设置为checked表示加载时选定)
复选框<input "type"="checkbox">name,value(发送到服务器的值),checked
下拉框<select>内使用<option>来表示每一项name
 <option>value,selected(设置为selected表示默认选择)
多选框<select multiple='multiple'>内使用<option>来表示每一项 
文件上传域<input type="file"> 
提交按钮<input type="submit">name(非必要),value(按钮文本)
图像按钮<input type="image"> 
html5日期控件<input type="date">name
html5电子邮件<input type="email">name
html5URL输入控件<input type="url">name
html5搜索输入控件<input type="search'> 

2.表单的工作原理

用户填写表单,然后单击一个按钮将所填信息提交到服务器,为了区分各类输入数据,表单的内容采用“名称/值”这样成对的格式。在Flask web服务端,可以使用request.form访问到用户提交的表单。服务器接收到表单内容,通常会再返回给浏览器一个页面。

3.表单结构

在服务器返回的html页面中,所有表单控件位于<form>元素中。比如可以构建一个包含一个文本输入框和提交按钮的表单:

hello.html

<!DOCTYPE html>

<html>
  <head>
    <title>Hello</title>
    <meta name="charset" content="utf8"/>
  </head>
  
  <body>
    {% if name %}
	  <h1>Hello,{{name}}</h1>
	{% else %}
	  <h1>Hello,Stranger!</h1>
	{% endif %}
    <form actions="http://127.0.0.1:8000" method="post">
	  <label>What your name?<input type="text" name="name" /></label>
	  <input type="submit" value="提交">
	</form>
  </body>
</html>
<form>标签通常需要设置action特性和method特性,表示接收表单的URL以及方法。

同时在服务端脚本中获取该表单并显示出来:

#coding:utf-8

from flask import Flask,request,render_template
app=Flask(__name__)

@app.route("/",methods=["POST","GET"])
def index():
	name=None
	form=None
	if request.method=="POST":
		form=request.form
		name=form["name"]
	return render_template("hello.html",name=name)

if __name__=="__main__":
	app.run(debug=True,host="0.0.0.0",port=8000)
启动服务器后,访问页面填写表单后,会根据表单内容返回给用户新的页面,比如填写“小明”后提交:

可以使用CSS来调整表单表现,同时可以使用JS对输入数据进行表单验证,在浏览器就初步检查用户输入的表单数据是否符合要求,这比发送到服务器服务器再返回结果来得快。

4.一个包含各类表单控件的例子:

hello.html

<!DOCTYPE html>
<html>
  <head>
    <title>Forms</title>
    <meta charset="utf8"/>
    <link rel="stylesheet" href="/static/css/style.css" type="text/css" />
  </head>
  
  <body>
    <form actions="http://127.0.0.1:8000" method="post">
      <fieldset>
        <legend>个人信息</legend>
        <div class="info">
          <label>姓名:<input type="text" name="name" size="30" maxlength="100" /></label>
          <br />
          <label>电子邮件:<input type="email" size="30" maxlength="100" name="email" /></label>
        </div>
        <div class="info">
          <label>性别:</labe>
          <label><input type="radio" name="sex" value="male">男</label>
          <label><input type="radio" name="sex" value="female">女</label>
        </div>
        <div class="info">
          <label for="age">年龄:</label>
          <select name="age" class="age">
            {% for age in range(100) %}
              <option value="{{age+1}}">{{age+1}}</option>
            {% endfor %}
          </select>
        </div>
      </fieldset>
      <fieldset>
        <legend>一些问题</legend>
        <div class="ques">
          <span>你喜欢的运动是什么?</span>
          <br />
          <label><input type="checkbox" name="run" />跑步</label>
          <label><input type="checkbox" name="swim" />游泳</label>
          <br />
        </div>
        <div class="ques">
          <label for="comments">你有什么想说的吗?</label>
          <br />
          <textarea rows="5" cols="40" id="comments"></textarea>
         </div>
      </fieldset>
      <input id="submit" type="submit" value="提交">
    </form>
  </body>
</html>
访问该页面可以看到一个丑陋的表单。通过CSS可以让它变得美观一些。把CSS放到static文件夹目录下,便于直接访问。

static/css/style.css:

input {
  font-size:120%;
  color:#5a5854;
  background-color:#f2f2f2;
  border:1px solid #bdbdbd;
  padding:5px 5px 5px 5px;
  margin-bottom:10px;
  border-radius:5px;
}
#submit {
  width:100px;
  height:45px;
  color:white;
  background-color:rgb(0,150,255);
}
#submit:focus {
  background-color:rgb(0,50,255)
}
input:focus,input:hover {
  background-color:#ffffff;
  border:1px solid #blele4;
}
select {
  border-radius:2px;
  border:1px solid #bdbdbd;
}
textarea {
  border-radius:5px;
  border:1px solid #bdbdbd;
}
fieldset {
	width:90%;
	border:1px inset rgb(0,150,255);
	border-radius:5px;
	padding:10px;
	margin:10px;
}
legend {
	background-color:#efeefef;
	border:1px solid  rgb(0,170,255);
	padding:5px 10px;
	text-align:left;
	border-radius:5px;
}
div {
	float:left;
	text-align:right;
	clear:left;
	margin:5px;
	padding:5px;
}
div.ques {
	text-align:left;
}
访问页面可以看到一个简单的表单界面:

这是一个简单的表单示例,自己实现了表单以及样式控制,提交表单后表单可以通过Flask的请求对象request获取表单数据从而处理表单。

但是在Flask中更方便的方法是使用Flask-WTF扩展,可以便捷地处理表单,Flask-WTF在下一篇博客介绍。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值