Flask-WTF —— 表单验证

Flask 学习笔记

一、WTForms 表单验证


1.1、Flask-WTF

        Flask-WTF 是简化了 WTForms 操作的一个第三方库。WTForms 表单的两个主要功能是验证用户提交数据的合法性以及渲染模板。当然还包括一些其他的功能:CSRF 保护,文件上传等。安装 Flask-WTF 默认也会安装 WTForms,因此使用 pip install flask-wtf 命令来安装 Flask-WTF



1.2、表单验证

  1. 既然是表单,那么就先写个页面 regist.html
	
	<html lang="en">
	<head>
	    <meta charset="UTF-8">
	    <title>Titletitle>
	head>
	<body>
	<form action="" method="post">
	    
	    用户名: <input type="text" name="username"><br>
	    密码: <input type="text" name="password"><br>
	    确认密码: <input type="text" name="password_repate"><br>
	    <input type="submit" value="注册">
	form>
	body>
	html>

  1. 视图函数文件 index.py
	from flask import Flask, request, render_template
	
	app = Flask(__name__)
	
	
	@app.route("/")
	def index():
	    return "首页"
	
	
	# 接收 GET, POST 请求
	@app.route("/regist/", methods=['GET', 'POST'])
	def regist():
	    if request.method == 'GET':
	        return render_template('regist.html')
	    else:
	        username = request.form.get('username')
	        password = request.form.get('password')
	        password_repate = request.form.get('password_repate')
	
	        if len(username) < 3 or len(username) > 10:
	            return "用户名长度不正确"
	
	        if password != password_repate:
	            return "两次密码不一直"
	
	        if len(password) < 3 or len(password) > 10:
	            return "密码长度不正确"
	
	
	if __name__ == '__main__':
	    app.run(debug=True)



1.3、使用 wtforms 验证

  1. 修改视图函数
	# 接收 GET, POST 请求
	@app.route("/regist/", methods=['GET', 'POST'])
	def regist():
	    if request.method == 'GET':
	        return render_template('regist.html')
	    else:
	        form = RegistForm(request.form)
	        
	        # 调用 validate() 方法验证, 通过则返回 true 否则返回 false
	        if form.validate():
	            return "success"
	        else:
	            # 验证的错误信息
	            print(form.errors)
	            # 根据错误信息可以返回自己想要显示的信息
	            return "fail"

  1. 创建 forms.py 文件实现表单验证
	from wtforms import Form, StringField
	from wtforms.validators import Length, EqualTo
	
	
	# 表单验证
	class RegistForm(Form):
	    username = StringField(validators=[Length(min=3, max=10, message='用户名长度不正确')])
	    password = StringField(validators=[Length(min=3, max=10)])
	    # 这里可以不用 validators=[Length(min=3, max=10), 因为上面已经判断过
	    password_repate = StringField(validators=[Length(min=3, max=10), EqualTo("password", message="两次密码不一致")])



二、表单里一些常用的验证器


2.1、邮箱验证 Email()

	email = StringField(validators=[Email()])

2.2、数字验证 NumberRange()

    age = IntegerField(validators=[NumberRange(1, 120, message='年龄范围错误')])

2.3、文本验证 InputRequired()

    username = StringField(validators=[InputRequired(message='用户名必须要添加')])

2.4、正则验证 Regexp()

    # 正则表达式: 1开始  第二位是3或5或8  后面还有9位
    phone = StringField(validators=[Regexp(r'1[358]\d{9}')])

2.5、url 验证 URL()

    info = StringField(validators=[URL()])

2.6、获取提交的数据进行判断
        需要用到特殊的方法实现,要创建一个名为 validate_要验证的属性 的函数来实现。

	# 验证码
    captcha = StringField(validators=[Length(min=4, max=4)])
    print(type(captcha))
    print(captcha)
    
    # 获取提交的属性信息, 主动返回错误信息
    # 例如这里要验证 captcha 属性, 则命名为 validate_captcha
    # 同理也可以验证上面的 name, age, phone 登
    def validate_captcha(self, field):
        print(type(field))
        print(field)
        print(field.data)
        # 假设验证码是 4587
        if field.data != '4587':
            raise ValidationError('验证码错误')

你可能感兴趣的:(Flask)