flask中的form表单实现注册和登录

本文介绍了如何在Flask应用中使用form表单进行注册和登录功能的实现。首先,配置`__init__.py`文件以处理POST请求。接着,在`models.py`中创建数据库模型,基于`db.Model`。`forms.py`中使用`flask_wtf`模块定义表单,包含字段类型和验证规则,如Required、Length、Regexp等,同时支持自定义验证规则。在`views.py`中,导入表单并利用`request.form`进行后端校验,通过`form.validate()`检查错误,并通过`formData.errors`捕获错误信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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)

 

E:\code\flask\School\School\main.py

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值