Python-web 框架flask----From表单

一、安装pip install flask-wtf

二、创建一个flask的项目引入相对应的包

详细使用代码

from flask import Flask,render_template
import flask
#引入模块
from flask_wtf import FlaskForm,CsrfProtect
#如果输入的是字符串那么就用StringField,如果是整数那么就用IntegerField
from wtforms import StringField,IntegerField
#验证方式
from wtforms.validators import Length,EqualTo,InputRequired

三、配置文件

大部分Flask扩展都需要定义相关配置项,所以我们先来在应用根目录下创建一个配置文件以备使用。我们先这样创建 (fileconfig.py):

 
#coding:utf8
import os
CSRF_ENABLED = True
SECRET_KEY = os.urandom(24)#'you-will-never-guess'

四、配置

import config
app = Flask(__name__)
app.debug = True
app.config.from_object(config)
CsrfProtect(app)

五、创建一个验证的类

class RegistForm(FlaskForm):
    username = StringField(validators=[Length(min=3,max=10,message=u"用户名长度有问题")])
    password = StringField(validators=[Length(min=6,max=20)])
    age = IntegerField(validators=[InputRequired()])

六、在路由代码中使用

@app.route('/',methods=["GET","POST"])
def index():
    if flask.request.method == "GET":
        return render_template("index.html")
    else:
        form = RegistForm(flask.request.form)
        if form.validate():
            username = form.username.data
            password =form.password.data
            print username,password
            return u"登录成功"
        else:
            print form.errors
            return u"错误"

七、WTForms支持的HTML标准字段
字段类型      说  明
StringField 文本字段
TextAreaField 多行文本字段
PasswordField 密码文本字段
HiddenField 隐藏文本字段
DateField 文本字段,值为 datetime.date 格式
DateTimeField 文本字段,值为 datetime.datetime 格式
IntegerField 文本字段,值为整数
DecimalField 文本字段,值为 decimal.Decimal
FloatField 文本字段,值为浮点数
BooleanField 复选框,值为 True 和 False
RadioField 一组单选框
SelectField 下拉列表
SelectMultipleField 下拉列表,可选择多个值
FileField 文件上传字段
SubmitField 表单提交按钮
FormField 把表单作为字段嵌入另一个表单
FieldList 一组指定类型的字段

八、常见的验证函数
验证函数 说  明
Email 验证电子邮件地址
EqualTo 比较两个字段的值;常用于要求输入两次密码进行确认的情况
IPAddress 验证 IPv4 网络地址
Length 验证输入字符串的长度
NumberRange 验证输入的值在数字范围内
Optional 无输入值时跳过其他验证函数
Required 确保字段中有数据
Regexp 使用正则表达式验证输入值
URL 验证 URL
AnyOf 确保输入值在可选值列表中
NoneOf 确保输入值不在可选值列表中

通常我们会把一个表单里面的元素定义为1个类。下面我们在app包下新建forms.py文件,专门用于定义表单的类:

#引入Form基类
from flask.ext.wtf import Form
#引入Form元素父类
from wtforms import StringField,PasswordField
#引入Form验证父类
from wtforms.validators import DataRequired,Length

__author__ = 'kikay'

#登录表单类,继承与Form类
class BaseLogin(Form):
    #用户名
    name=StringField('name',validators=[DataRequired(message=u"用户名不能为空")
        ,Length(10,20,message=u'长度位于10~20之间')],render_kw={'placeholder':u'输入用户名'})
    #密码
    password=PasswordField('password',validators=[DataRequired(message=u"密码不能为空")
        ,Length(10,20,message=u'长度位于10~20之间')],render_kw={'placeholder':u'输入密码'})

views.py新增以下代码:

from flask import url_for
#导入定义的BaseLogin
from app.forms import BaseLogin

#定义处理函数和路由规则,接收GET和POST请求
@app.route('/baselogin',methods=('POST','GET'))
def baselogin():
    form=BaseLogin()
    #判断是否是验证提交
    if form.validate_on_submit():
        #跳转
        flash(form.name.data+'|'+form.password.data)
        return redirect(url_for('success'))
    else:
        #渲染
        return render_template('baselogin.html',form=form)

@app.route('/success')
def success():
    return '<h1>Success</h1>'

模板baselogin.html:

  <form method="POST">
            <!--启动CSRF-->
            {{form.hidden_tag()}}
            <p>
                用户:{{form.name(size=20,id='name')}}
                {%for e in form.name.errors%}
                <span style="color: red">*{{e}}</span>
                {%endfor%}
            </p>
            <p>
                密码:{{form.password(size=20,id='password')}}

               {%for e in form.password.errors%}
                <span style="color: red">*{{e}}</span>
                {%endfor%}
            </p>
            <p><button style="float: right" type="submit">登录</button></p>
        </form>

Flash消息在表单上面显示一个消息,提示用户用户名或密码错误。

@app.route('/baselogin2', methods=('POST', 'GET'))
def baselogin2():
    form = BaseLogin()
    # 判断是否是验证提交
    if form.validate_on_submit():
        username = form.name.data
        if username == 'admin':
            return redirect(url_for('success'))
        else:
            # 渲染表单
            flash(u'用户名不正确')
    # 渲染
    return render_template('mtflogin.html', form=form)

会话保持利用session机制完成会话保持:

@app.route('/baselogin2', methods=('POST', 'GET'))
def baselogin2():
    form = BaseLogin()
    # 判断是否是验证提交
    if form.validate_on_submit():
        name=session.get('name')
        if name is None and name!=form.name.data:
            flash(u'您已经切换了用户')
            return redirect(url_for('success'))
        elif name==None:
            session['name']=form.name.data
    # 渲染
    return render_template('mtflogin.html', form=form)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值