之前我们讲了Flask中的过滤  继承  包含  宏   今天来说说表单,说起表单大家都不陌生吧,在html中form表单一般用于采集数据和提交数据,在Flask中当然也有表单,现在就说说Flask中的表单的简单应用。

在说表单前给大家先说一下Flask中的消息闪现

Flash中的消息闪现,在官方的解释是用来给用户做出反馈。不过实际上这个功能只是一个记录消息的方法,在某一个请求中记录消息,在下一个请求中获取消息,然后做相应的处理,也就是说flask只存在于两个相邻的请求中“闪现”,第三次请求就不存在这个flash了。

通常情况下配合模板系统进行调用,可以实现一种伪”ajax”请求的效果

基于 flash 模块

from flask import flash

模板输出flash

 

Web 表单是 Web 应用程序的基本功能。

它是HTML页面中负责数据采集的部件。表单有三个部分组成:表单标签、表单域、表单按钮。表单允许用户输入数据,负责HTML页面数据采集,通过表单将用户输入的数据提交给服务器。

在Flask中,为了处理web表单,我们可以使用 Flask-WTF 扩展,它封装了 WTForms,并且它有验证表单数据的功能。

直接上代码了,代码中有相应的注释和注意事项:

使用 html 自带的表单

创建模板文件如: login.html,在其中直接写form表单:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>flask普通表单提交数据,使用flask消息闪现来将反馈显示给用户</title>
</head>
<body>
    
    <h1> 用户注册</h1>
    <br>
    {# action属性。如果不写 默认提交给自己 methodsh属性 来指定表单的提交方式#}
    <form method="post">
        <lable> 用户名</lable>
        {# from 提交数据通过name选择器来提交#}
        <input type="text" name="username" placeholder="请输入用户名">
        <br>


        <label>密码</label>
        <input type="password" name="password">
        <br>

        <label>确认密码</label>
        <input type="password" name="password1">
        <br>

        {# 将flask 消息闪现和后台联系起来 #}
        {# 将消息闪现里面的所有消息遍历,取出需要返回给用户的消息#}
        {% for message in get_flashed_messages() %}
                    {{ message }}
        {% endfor %}

        <input type="submit" value="注册">
    </form>

</body>
</html>

当然这只是简单的表单写入,还需要写一个py文件把它们联系起来。具体如下:

# -*- encoding: utf-8 -*-
#flask 的消息闪现以来与flask库,用户发送的请求方式存储在requests模块中
from flask import Flask,flash,render_template,request

#导入wtf扩展的表单类
from flask_wtf import FlaskForm
#导入自定义表单需要用到的字段类型
from wtforms import SubmitField,StringField,PasswordField

#新建一个表单类

class RegisterFrom(FlaskForm):
    username=StringField('用户名')
    password=PasswordField('密码')
    password1=PasswordField('确认密码')
    submit=SubmitField('注册')

#建立对象
app = Flask(__name__)

#载入配置文件

app.config.from_pyfile('config.ini')

@app.route ('/',methods=['POST','GET'])
def index ():
    #判断client发送的请求类型
    #在自己请求自己的逻辑中,GET只用于来解析模板,而POST用来判断数据逻辑
    if request.method == 'POST':
        #使用form属性来接收表单提交过来的数据
        username=request.form.get('username')
        password=request.form.get('password')
        password1=request.form.get('password1')

        #等同于 if username == "" or password == "" or password1 ==""
        if not all([username,password,password1]):
            #利用闪现消息来提醒用户
            flash('参数缺少')
        elif password !=password1:
            flash('密码不一致')
        else:
            flash('注册成功')
            return '成功'
                


    
    #将定义号的表单类传递给模板,进行方法化设置
    return render_template('day4_wtform.html',form=RegisterFrom())

if __name__ == "__main__":
    app.run()

 

posted on 2018-12-25 20:37  Lucky~  阅读(78)  评论(0编辑  收藏  举报