测开之路一百四十八:WTForms表单验证

使用WTForms表单验证,可以在数据建模时就设置验证信息和错误提示

创建模型时,设置验证内容,如必填、格式、长度

from flask_wtf import Formfrom wtforms import StringField, PasswordField, BooleanFieldfrom wtforms import validators

class UserRegForm(Form):    username = StringField(‘用户名‘,               [validators.DataRequired(‘用户名必填!‘), validators.Length(min=4, max=8, message=‘长度为4-8之间‘)])

    email = StringField(‘邮箱‘, [validators.Email(‘邮箱格式不正确‘)])

    password = PasswordField(‘密码‘,               [validators.DataRequired(‘密码必填!‘), validators.Length(min=6, max=16, message=‘长度为6-16之间‘)])

    confirm = PasswordField(‘确认密码‘, [validators.EqualTo(‘password‘, message=‘密码输入不一致‘)])    accept = BooleanField(‘同意协议‘, [validators.DataRequired(‘同意协议才可以注册‘)])

前台页面,渲染数据信息和错误信息

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>用户注册</title></head><body><form action="#" method="POST">{#form要求加上form.csrf_token方脚本跨域攻击#}{{ form.csrf_token }}    <table border="1">        <tr>            <td>{{ form.username.label }}</td>            <td>{{ form.username }}</td>{#            如果有错误信息,就遍历出来#}            <td>                {% if form.username.errors %}                    {% for error in form.username.errors %}                        <li>{{ error }}</li>                    {% endfor %}                {% endif %}            </td>        </tr>        <tr>            <td>{{ form.email.label }}</td>            <td>{{ form.email }}</td>            <td>                {% if form.email.errors %}                    {% for error in form.email.errors %}                        <li>{{ error }}</li>                    {% endfor %}                {% endif %}            </td>        </tr>        <tr>            <td>{{ form.password.label }}</td>            <td>{{ form.password }}</td>            <td>                {% if form.password.errors %}                    {% for error in form.password.errors %}                        <li>{{ error }}</li>                    {% endfor %}                {% endif %}            </td>        </tr>        <tr>            <td>{{ form.confirm.label }}</td>            <td>{{ form.confirm }}</td>            <td>                {% if form.confirm.errors %}                    {% for error in form.confirm.errors %}                        <li>{{ error }}</li>                    {% endfor %}                {% endif %}            </td>        </tr>        <tr>            <td></td>            <td>{{ form.accept }}{{ form.accept.label }}</td>        </tr>        <tr>            <td></td>            <td><input type="submit" value="提交"></td>        </tr>    </table></form></body></html>

路由

from flask import Flask, render_template, request

app = Flask(__name__, static_url_path=‘‘)  # 初始化app,

@app.route(‘/reg/‘, methods=[‘GET‘, ‘POST‘])def user_reg():    from validations.froms import UserRegForm    form = UserRegForm(request.form)    if request.method == ‘POST‘ and form.validate():        return str(form.data)    return render_template(‘user-reg.html‘, form=form)

访问并触发验证

输入符合要求的数据访问

原文地址:https://www.cnblogs.com/zhongyehai/p/11538118.html

时间: 2024-08-25 09:59:06

测开之路一百四十八:WTForms表单验证的相关文章

测开之路一百三十八:会话管理之session

session管理和使用,需要用到flask的session模块和设置安全码:app.secret_key 比如列表页和编辑功能只能给admin用 列表页 编辑页 添加session 登录成功时,把username添加到session里面 app.secret_key = 'qoihf2397r21380r2/./ad' # 加密的安全码,越复杂越好,flask后台自动进行加密 @app.route('/login/', methods=['GET', 'POST'])def login():

测开之路一百四十四:ORM之SQLAlchemy查询

在上一篇的基础上,插入数据 查询 Department.query.all() # 用表对象查db.session.query(Department).all() # 用db对象查 查询前两条,直接python截取前两条数据 排序 默认升序:order_by(排序的字段名) 倒序:从sqlalchemy导入desc 查询单个指定字段 查询多个指定字段 只用一个变量接收多个查询结果的时候,SQLAlchemy默认用namedtuple进行命名处理 namedtuple结构: 别名:label(别名

测开之路一百二十六:flask之获取request请求数据

可以根据flask的request对象获取所有的请求信息 path = request.path # 获取请求地址method = request.method # 获取请求方法ip = request.remote_addr # 请求来源的ipform = request.form # 获取form表单的数据value = request.values # 获取查询字符串/表单数据headers = request.headers # 后区头部信息User_Agent = request.he

测开之路一百二十五:flask之urlencode参数传递和解析

当get请求传参时,用?分隔参数和域名,用&分隔参数,如果参数里面本身就有&符号就会识别不出来,还是会当成分隔符,所以这些数据在传输的时候,就需要转义,现在普遍是转成urlencode编码:%20%xx%23 在jinja2模板里面,可以使用 data|urlencode 发送urlencode编码,而python里面又有urllib.parse.unquote()可以解析urlencode编码 视图函数 html:访问"/"返回html,在html上面点击超链接时请求

测开之路一百二十九:jinja2模板语法

flask用的是jinja2模板,有自己特定的语法 形参: 在html里面留占位参数: {{ 参数名 }},后端传值时,参数名=参数值 <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>b页面</title></head><body> <h1>{{ user }},你好<

测开之路一百三十六:错误消息闪回提示

错误消息提示:flask.flash 视图 app.secret_key = 'qoihf2397r21380r2/./ad' # 加密的安全码,越复杂越好,flask后台自动进行加密 @app.route('/login/', methods=['GET', 'POST'])def login(): """ 登录 """ if request.method == 'POST': username = request.form.get('user

测开之路一百四十一:蓝图实现程序模块化

把每一个模块独立出来,然后在主app里面注册,这样就实现了模块之间互不干扰 新建蓝图 artcle.views.py """article蓝图"""from flask import request, render_template, redirect, url_forfrom flask import Blueprint article = Blueprint('article', __name__) @article.route('/arti

测开之路一百四十七:用WTForms实现编辑功能

接上一篇的内容 把原先的数据库模型全部给默认值,后面form赋值的时候就不用传位置参数了 把视图逻辑修改一下 # 视图层from datetime import datetimefrom flask.views import MethodViewfrom flask import render_template, redirect, url_for, request from personal.models import db, Employee, Departmentfrom personal

测开之路一百五十二:基于jquery的ajax实现(load、get、ajax)

ajax除了用原生的js实现之外,也可以使用jquery实现,而且用jquery更方便 看一个简单的示例,保留上一篇的content路由和html,实现上一篇一样的功能,点击获取内容,局部刷新 准备一个页面用于被调用 <h1>这是content.html的h1标签</h1><p style="background: red"> 这是content.html的p标签,红色 <a href="https://www.baidu.com/&