基于python-flask-android的任务管理系统开发(八、flask-form表单)

表单是web应用中最基础的组件之一,flask-form组件由Flask-WTF扩展提供支持。
具体的学习内容详见:

> https://blog.youkuaiyun.com/yy19890521/article/details/81120962

myapp/forms.py
创建RegisterForm,LoginForm,AddtodoForm,EdittodoForm等表格,带有验证功能,各种格式的验证。

from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField, ValidationError,SelectField,DateTimeField
from wtforms.validators import DataRequired, Email, Length, EqualTo
# 注册表单
from myapp.models import User,Category
class RegisterForm(FlaskForm):
    email = StringField(
        label="邮箱",
        validators=[
            DataRequired(),
            Email(),        
        ],
        render_kw = {'placeholder': u'输入EMAIL地址'}
    )
    username = StringField(
        label="用户名",
        validators=[
            DataRequired(),

        ],
    )
    password = PasswordField(
        label='密码',
        validators=[
            DataRequired(),
            Length(6, 12, "密码必须是6-12位")
        ]
    )

    repassword = PasswordField(
        label='确认密码',
        validators=[
            EqualTo("password", "密码与确认密码不一致")
        ]
    )

    submit = SubmitField(
        label="注册"
    )

    # *****************************************************
    # 默认情况下validate_username会验证用户名是否正确, 验证的规则, 写在函数里面
    def validate_username(self, field):
        # filed.data ==== username表单提交的内容
        u = User.query.filter_by(username=field.data).first()
        if u:
            raise ValidationError("用户名%s已经注册" % (u.username))

    def validate_email(self, filed):
        u = User.query.filter_by(email=filed.data).first()
        if u:
            raise ValidationError("邮箱%s已经注册" % (u.email))


# 登录表单
class LoginForm(FlaskForm):
    username = StringField(
        label="用户名",
        validators=[
            DataRequired(),

        ],
    )
    password = PasswordField(
        label='密码',
        validators=[
            DataRequired(),
            # Length(6, 12, "密码必须是6-12位")
        ]
    )
    submit = SubmitField(
        label="登录"
    )

class AddToDoForm(FlaskForm):
    content=StringField(
        label='任务内容',
        validators=[DataRequired()]
    )
    category=SelectField(
        label='任务类型',
        coerce=int,
        choices=[(item.id,item.name) for item in Category.query.all()]
    )
    submit=SubmitField(
        label='添加任务',
    )


# 关于任务的基类
class TodoForm(FlaskForm):
    content = StringField(
        label="任务内容",
        validators=[
            DataRequired()
        ]
    )
    # 任务类型
    category = SelectField(
        label="任务类型",
        coerce=int,
        choices=[(item.id, item.name) for item in Category.query.all()]
    )
class AddTodoForm(TodoForm):
    finish_time = DateTimeField(
        label="任务终止日期"
    )
    submit = SubmitField(
        label="添加任务",
    )

class EditTodoForm(TodoForm):
    submit = SubmitField(
        label="编辑任务",
    )

模板myapp/templates/baselogin.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <style>
        .base_login{
            float: none;
            display: block;
            margin-left: auto;
            margin-right:auto;
            width: 200px;
        }
    </style>
    <title>BaseLogin</title>
</head>
<body>
<div class="base_login">
    <h1>用户登录</h1>
    <div>
        <form method="POST">
            <!--启动CSRF,config.py中配置了密码-->
            {{form.hidden_tag()}}
            <p>
                用户:{{form.name(size=20,id='username')}}
                {%for e in form.username.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>
    </div>
</div>
</body>
</html>

myapp/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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值