Flask框架运用WTForms实现用户注册的示例详解:全球微头条
来源:脚本之家    时间:2022-12-23 06:45:55


(资料图片仅供参考)

WTForms 是用于web开发的灵活的表单验证和呈现库,它可以与您选择的任何web框架和模板引擎一起工作,并支持数据验证、CSRF保护、国际化等,运用WTForms框架并配合Flask可实现一个带有基本表单验证功能的用户注册与登录页面,经过美化的页面可以直接应用到项目中。

WTForms 需要额外安装PIP包pip install WTForms email_validator

实现用户注册页面

templates目录下新建index.html




    
    Title
    
    
    



    
用 户 注 册
{{ form.username }}
{{ form.email }}
{{ form.password }}
{{ form.RepeatPassword }}
{{ form.submit }}

Flask 后端部分使用如下代码:

from flask import Flask, render_template, request, redirect
from wtforms import Form,validators,widgets
from wtforms.fields import simple

app = Flask(import_name=__name__,
            static_url_path="/python",   # 配置静态文件的访问url前缀
            static_folder="static",      # 配置静态文件的文件夹
            template_folder="templates") # 配置模板文件的文件夹

class RegisterForm(Form):
    username = simple.StringField(
        #label="注册用户:",
        validators=[
            validators.DataRequired(message="用户名不能为空"),
            validators.Length(min=6, max=18, message="用户名长度必须大于%(min)d且小于%(max)d")
        ],
        widget=widgets.TextInput(),
        render_kw={"class": "form-control",
                   "placeholder":"输入注册用户名"}
    )
    email = simple.StringField(
        #label="用户邮箱:",
        validators=[validators.DataRequired(message="邮箱不能为空"),validators.Email(message="邮箱格式输入有误")],
        render_kw={"class":"form-control",
                   "placeholder":"输入Email邮箱"}
    )
    password = simple.PasswordField(
        #label="用户密码:",
        validators=[
            validators.DataRequired(message="密码不能为空"),
            validators.Length(min=5, message="用户名长度必须大于%(min)d"),
            validators.Regexp(regex="[0-9a-zA-Z]{5,}",message="密码不允许使用特殊字符")
        ],
        widget=widgets.PasswordInput(),
        render_kw={"class": "form-control",
                   "placeholder":"输入用户密码"}
    )
    RepeatPassword = simple.PasswordField(
        #label="重复密码:",
        validators=[
            validators.DataRequired(message="密码不能为空"),
            validators.Length(min=5, message="密码长度必须大于%(min)d"),
            validators.Regexp(regex="[0-9a-zA-Z]{5,}",message="密码不允许使用特殊字符"),
            validators.EqualTo("password",message="两次密码输入必须一致,龟孙")
        ],
        widget=widgets.PasswordInput(),
        render_kw={"class": "form-control",
                   "placeholder":"再次输入密码"}
    )
    submit = simple.SubmitField(
        label="用 户 注 册",
        render_kw={ "class":"btn btn-success" }
    )

@app.route("/register", methods=["GET", "POST"])
def Register():
    if request.method == "GET":
        RetForm = RegisterForm()
        return render_template("index.html", form=RetForm)
    else:
        RetForm = RegisterForm(formdata=request.form)
        if RetForm.validate():
            print("接收到数据:", RetForm.data)
            return """<script>alert("您的注册请求已提交!");</script>"""
        else:
            print(RetForm.errors)
        return render_template("index.html", form=RetForm)

if __name__ == "__main__":
    app.run(host="127.0.0.1", port=80, debug=False)

代码运行效果如下:

实现用户登录页面

templates目录下新建index.html




    
    Title
    
    
    



	
用 户 登 录
{{ form.username }}
{{ form.password }}

Flask 后端部分使用如下代码:

from flask import Flask, render_template, request, redirect
from wtforms import Form,validators,widgets
from wtforms.fields import simple,html5

app = Flask(import_name=__name__,
            static_url_path="/python",   # 配置静态文件的访问url前缀
            static_folder="static",      # 配置静态文件的文件夹
            template_folder="templates") # 配置模板文件的文件夹

class LoginForm(Form):
    username = simple.StringField(
        validators=[
            validators.DataRequired(message=""),
            validators.Length(min=4, max=15, message=""),
            validators.Regexp(regex="[0-9a-zA-Z]{4,15}", message="")
        ],
        widget=widgets.TextInput(),
        render_kw={"class":"form-control",
                   "placeholder":"请输入用户名或电子邮件"}
    )
    password = simple.PasswordField(
        validators=[
            validators.DataRequired(message=""),
            validators.Length(min=5, max=15,message=""),
            validators.Regexp(regex="[0-9a-zA-Z]{5,15}",message="")
        ],
        widget=widgets.PasswordInput(),
        render_kw={"class":"form-control",
                   "placeholder":"请输入密码"}
    )

@app.route("/login",methods=["GET","POST"])
def Login():
    if request.method == "GET":
        RetForm = LoginForm()
        return render_template("index.html", form=RetForm)
    else:
        RetForm = LoginForm(formdata=request.form)
        if RetForm.validate():
            temp = RetForm.data
            print("接收到数据:",temp)
            return """<script type="text/javascript">alert("登录完成!");</script>"""
        return render_template("index.html", form=RetForm)

if __name__ == "__main__":
    app.run(host="127.0.0.1", port=80, debug=False)

代码运行效果如下:

到此这篇关于Flask框架运用WTForms实现用户注册的示例详解的文章就介绍到这了,更多相关Flask WTForms用户注册内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

关键词: 用户注册 特殊字符 用户密码 希望大家 模板引擎

上一篇:

下一篇:

X 关闭

X 关闭