flask组件 --- wtforms

摘要:
“),])passwd=simple.PasswordField(label=”Password:“,validators=[validators.DataRequired(message=”Password不能为空!“),validators.EqualTo(”passwd“,message=”输入两次的密码不一致!“)]email=html5.EmailField(label=”email:“,validators=[validators.email(message=“电子邮件格式不正确!

1. 简介

  WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证。

2. 安装

  pip install wtforms

3. 使用----用户注册

  注册页面需要让用户输入:用户名、密码、确认密码、性别、爱好、居住城市等.

form类: 

from flask import Flask,render_template,request,redirect
from wtforms import Form, widgets, validators
from wtforms.fields import simple   # 放比较简单的字段类型
from wtforms.fields import html5    # 放html相关的
from wtforms.fields import core     # 放比较核心的


class RegisterForm(Form):
    name = simple.StringField(
        label="用户名: ",
        render_kw={"class":"form-control"},
        default="默认的用户名",
        validators=[validators.DataRequired(message="姓名不能为空!"),]
    )

    passwd = simple.PasswordField(
        label="密码: ",
        validators=[validators.DataRequired(message="密码不能为空!"),]
    )

    re_passwd = simple.PasswordField(
        label="确认密码: ",
        validators=[
            validators.DataRequired(message="密码不能为空!"),
            validators.EqualTo("passwd",message="两次输入的密码不一致!")
        ]
    )

    email = html5.EmailField(
        label="邮箱: ",
        validators=[
            validators.Email(message="邮箱格式不正确!"),
            validators.DataRequired(message="邮箱不能为空!")
        ]
    )

    gender = core.RadioField(
        label="性别",
        choices=(
            (1,""),
            (2,"")
        ),
        default=1,
        coerce=int
    )

    city = core.SelectField(
        label="居住城市",
        choices=(
            ("bj","北京"),
            ("ty","太原"),
        )
    )

    hobby = core.SelectMultipleField(
        label="爱好",
        choices=(
            (1,"game"),
            (2,"sport"),
            (3,"run")
        ),
        coerce=int,
        default=[1,2],
        widget=widgets.ListWidget(prefix_label=False),      # 整句表示将多选下拉框转为多选框, false表示框在文字前边
        option_widget=widgets.CheckboxInput()               # 表示将多选框转为可供点击选择的多选框
    )



class TestForm(Form):
    name = simple.StringField(
        label="姓名: "
    )
    level = core.SelectField(
        label="级别: ",
        choices=(),
        coerce=int
    )

    def __init__(self):
        super(TestForm, self).__init__()
        self.level.choices = fetch_all(sql="select id,lv_name from level",cursor_style=None)

视图函数:

@app.route("/register",methods=["get","post"])
def register():
    if request.method == "GET":
        myform = RegisterForm()
        return render_template("register.html",myform=myform)
    myform = RegisterForm(formdata=request.form)
    if myform.validate():
        print(myform.data)
        return redirect("/index")
    return render_template("register.html",myform=myform)

html模板:

<form action="" method="post" novalidate>
    {% for field in myform %}
    <p>{{ field.label }}{{ field }}{{ field.errors.0 }}</p>
    {% endfor %}
    <input type="submit" value="提交">
</form>

4. forms页面显示默认值

在视图函数中:

@app.route("/tt")
def test():
    if request.method == "GET":
        testform = TestForm(data={"level":"3","name":"eva"})    # 加入data参数, 即将data里面信息在页面上以默认值的形式显示出来
        return render_template("test.html",testform=testform)

显示效果:

flask组件 --- wtforms第1张

5. 数据库更新同步到页面

flask组件 --- wtforms第2张

免责声明:文章转载自《flask组件 --- wtforms》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇【QT】VTK编译bootstrap下拉列表重置联动下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Qt---ToolBox自由伸展

参考:Qt实战12.可自由展开的ToolBox - Qt小罗 - 博客园 (cnblogs.com)   1 MainWindow::MainWindow(QWidget *parent) 2 : QMainWindow(parent) 3 , ui(new Ui::MainWindow) 4 { 5 ui->set...

python实现labelme样本自动标注

python实现labelme样本自动标注 前言 说明 正文 一、 json文件简介及相关API: 二、 特征区域检测及相应API 三、 计算偏移量以及标注框的新的点集 四、 json文件数据其他修改 前言 公司前段时间做一个项目,需要用到语义分割,样本很多,但是都没有标注,也没有让标注公司弄,只好自己标注,平均两分半一张,一天标200多张...

设置textView或者label的行间距方法

一,效果图。 二,代码。 1 RootViewController.m 2 3 4 5 - (void)viewDidLoad 6 7 { 8 9 [super viewDidLoad]; 10 11 //Do any additional setup after loading the view. 12...

(7)python tkinter-菜单栏

菜单栏 Menu f = tkinter.Menu(root) root['menu']=f f.add_command(label='菜单')# f.add_command(label='关于') import tkinter import tkinter.messagebox def but(): tkinter.Toplevel() roo...

django面试题必问

1、谈谈你对http协议的认识。 HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。HTTP是一个应用层协议,由请...

el-select选中特定项的触发事件

需求:下拉框中如选中自定义时间,则出现弹窗 实现代码: html  <el-select v-model="type"clearable @change="fnEdit"><el-option  v-for="item in typeOptions":key="item.value":label="item.label":value="...