E:\code\flask\School\School\__init__.py
先把配置文件给设置好,在表单提交的过程中,如果要使用post请求的话,也要先在这里配置,这里as CsrfProtece是因为以前的版本中是叫这个名字,但是后来改了
实例化app,配置app,实例化db
E:\code\flask\School\School\models.py
这里导入的是School下的db,但是因为School是一个包,所以实际上导入的是__init__.py文件里的db
然后构造数据库,继承的是db.Model的方法
E:\code\flask\School\School\forms.py
这是flask中的form表单提供的后端检验,需要先下载flask_wtf模块
1、表单类的父类Form
2、表单类的字段类型 wtforms
3、表单类的校验 validators
校验的方式:在字段参数当中使用validators=[],在列表当做编写校验规则
规则
1、使用validators自带规则
- Required 字段不可以为空 message 提示消息
- Lenth 字段的长度
- Max 最大长度
- Min 最下长度
- Message 提示消息
- Min不可以大于max
- Regexp 使用正则进行校验
- Regex 正则
- Message 提示消息
2、自定义校验规则
- 1、定义类来描述规则
- 2、在构造函数当做编写message消息
- 3、定义__call__来接受字段数据,进行校验
- 4、如果不符合校验用validators.ValidationError来报错
from flask_wtf import FlaskForm as Form
import wtforms
from wtforms import validators
from School.models import User
class EmailValider:
def __init__(self, message):
self.message = message
def __call__(self, form, field):
data = field.data
user = User.query.filter_by(email=data).all()
if not user:
return None
raise validators.ValidationError(self.message)
class UserForm(Form):
name = wtforms.StringField("用户姓名", validators=[
validators.length(min=2, max=8, message="用户名必须大于2位小于8位"),
validators.Regexp(regex=r"[0-9a-zA-Z]{2,8}", message="用户名必须是数字字母下划线")
])
email = wtforms.StringField("用户邮箱", validators=[
validators.Regexp(regex=r"\w+@\w+\.\w+", message="邮箱格式错误"),
EmailValider(message="邮箱重复")
])
password = wtforms.StringField("密码", validators=[
validators.length(min=2, max=8, message="密码必须大于2位小于8位")
])
E:\code\flask\School\School\view.py
再视图当中使用form类进行后端校验的步骤
1、导入表单
2、通过request.form将请求数据传递给form类
3、使用validator方法来发起校验
4、使用formData.errors来接受错误
import hashlib
from flask import request
from flask import render_template
from School import app
from School.forms import UserForm
from School.models import User, db
session = db.session
def setPassword(password):
md5 = hashlib.md5()
md5.update(password.encode())
result = str(md5.hexdigest())
return result
@app.route("/register", methods=["POST", "GET"])
def register():
error = "empty"
if request.method == "POST":
data = UserForm(request.form)
if data.validate():
clean_data = data.data
user = User(
name=clean_data["name"],
password=setPassword(clean_data["password"]),
email=clean_data["email"]
)
session.add(user)
session.commit()
error = "success"
else:
error = data.errors
return render_template('register.html', error=error)