上一篇文章中我们研究了jinja2
模板使用 和Flask
的路由,这一次来看一点激动人心的东西,即“表单”。学习过前端的同学都知道,对于即将要开发的系统而言,输入功能是必须的,利用HTML
表单来获取用户的输入就成了天经地义的事情。
所谓的HTML
表单,指的是在一个HTML
页面上有一个Form
,它里面包含一些需要用户输入的东西,下面我们就先来创建一个基于HTML
的学生信息添加界面:info.html
学生信息
学生信息添加界面
学生信息添加界面的作用是收集输入的学生信息,当用户填写完成后,需要将该信息提交给程序来判断其信息是否正确。学生信息添加界面如下:
上述HTML
模板中,表单Form
需要提交给路由studentinfo
,这就需要在主程序中添加相关的路由。
@app.route('/info/')
def info():
return render_template('info.html')
@app.route("/studentinfo/", methods=['POST', 'GET'])
def studentinfo():
name = request.form["name"]
id = request.form["id"]
sex = request.form["sex"]
chinese = request.form['chinese']
math = request.form['math']
english = request.form['english']
return f"姓名:{name}
学号:{id}
性别:{sex}
语文:{chinese}
数学:{math}
英语:{english}"
获取表单的信息,通过request
对象,其中的表单信息是一个字典,通过索引表单中相关输入框的name
,即可得到相应的信息,在这个函数中,我们只是简单将所获取的信息显示出来,结果如下:
在学生信息输入正确后,一般情况下我们在判断完成后要重定向到相关的页面,这就用到Flask
中的两个函数,一个是redirect
,一个是url_for
。redirect
是重定向的函数,而url_for
则是构建一个有效的Flask
路由,该函数的第一个参数是一个被路由修饰的函数,其余参数是一个或多个关键字,这些参数对应于要重定向的URL
的变量部分。
以上面学生信息添加界面为例,当我们得到学生输入的信息后,在studentinfo
函数中,要将学生的信息重定向到一个后台管理页面,当然,为了简单起见,在后台管理页面也只是显示一下信息,先来设置一个后台学生显示页面:allinfo.html
学生信息列表
学生信息列表
姓名
学号
性别
语文
数学
英语
{
{ name }}
{
{ id }}
{
{ sex }}
{
{ chinese }}
{
{ math }}
{
{ english }}
这时在相应的studentlist
函数中,需要用request.args.get()
来获取相应的参数数据。
接着还需要修改一下刚才的studentinfo
函数,如下所示:
@app.route("/studentinfo/", methods=['POST', 'GET'])
def studentinfo():
name = request.form["name"]
id = request.form["id"]
sex = request.form["sex"]
chinese = request.form['chinese']
math = request.form['math']
english = request.form['english']
# return f"姓名:{name}
学号:{id}
性别:{sex}
语文:{chinese}
数学:{math}
英语:{english}"
return redirect(url_for('studentlist', name=name, id=id, sex=sex, chinese=chinese, math=math, english=english))
@app.route("/studentlist/", methods=['GET'])
def studentlist():
name = request.args.get('name')
id = request.args.get('id')
sex = request.args.get('sex')
chinese = request.args.get('chinese')
math = request.args.get('math')
english = request.args.get('english')
return render_template('allinfo.html', name=name, id=id, sex=sex, chinese=chinese, math=math, english=english)
显示结果如下所示:
通过这种重定向,我们可以在特定的情形下将语句重定向至不同的页面。
本文研究了表单的提交和数据的获取,同时对于路由的重定向问题进行了分析,正是这些基本的逻辑组成了庞大的网络基础,深入分析一个系统,无非就是数据填充、数据获取、数据分析和处理以及页面跳转,只有掌握了这些基础知识,才能去设计和理解更高深的一些概念。
Flask学习笔记(一)
Flask学习笔记(二)
Flask学习笔记(四): Flask与数据库连接