flask中的wtforms使用(代码片段)

明王不动心 明王不动心     2022-11-07     303

关键词:

一、简单介绍flask中的wtforms

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

安装:

pip3 install wtforms

二、简单使用wtforms组件

1、用户登录

具体代码:

复制代码
from  flask import Flask,render_template,request,redirect
from  wtforms.fields import core
from wtforms.fields import html5
from wtforms.fields import simple
from wtforms import Form
from wtforms import validators
from wtforms import widgets
app = Flask(__name__,template_folder="templates")

class Myvalidators(object):
    \'\'\'自定义验证规则\'\'\'
    def __init__(self,message):
        self.message = message
    def __call__(self, form, field):
        print(field.data,"用户输入的信息")
        if field.data == "haiyan":
            return None
        raise validators.ValidationError(self.message)

class LoginForm(Form):
    \'\'\'Form\'\'\'
    name = simple.StringField(
        label="用户名",
        widget=widgets.TextInput(),
        validators=[
            Myvalidators(message="用户名必须是haiyan"),#也可以自定义正则
            validators.DataRequired(message="用户名不能为空"),
            validators.Length(max=8,min=3,message="用户名长度必须大于%(max)d且小于%(min)d")
        ],
        render_kw="class":"form-control"  #设置属性
    )

    pwd = simple.PasswordField(
        label="密码",
        validators=[
            validators.DataRequired(message="密码不能为空"),
            validators.Length(max=8,min=3,message="密码长度必须大于%(max)d且小于%(min)d"),
            validators.Regexp(regex="\\d+",message="密码必须是数字"),
        ],
        widget=widgets.PasswordInput(),
        render_kw="class":"form-control"
    )



@app.route(\'/login\',methods=["GET","POST"])
def login():
    if request.method =="GET":
        form = LoginForm()
        return render_template("login.html",form=form)
    else:
        form = LoginForm(formdata=request.form)
        if form.validate():
            print("用户提交的数据用过格式验证,值为:%s"%form.data)
            return "登录成功"
        else:
            print(form.errors,"错误信息")
        return render_template("login.html",form=form)


if __name__ == \'__main__\':
    # app.__call__()
    app.run(debug=True)
复制代码

login.html

复制代码
<body>
<form action="" method="post" novalidate>
    <p> form.name.label   form.name   form.name.errors.0 </p>
    <p> form.pwd.label   form.pwd   form.pwd.errors.0 </p>
    <input type="submit" value="提交">
    <!--用户名:<input type="text">-->
    <!--密码:<input type="password">-->
    <!--<input type="submit" value="提交">-->
</form>
</body>
复制代码

2、用户注册

复制代码
from flask import Flask,render_template,redirect,request
from wtforms import Form
from wtforms.fields import core
from wtforms.fields import html5
from wtforms.fields import simple
from wtforms import validators
from wtforms import widgets

app = Flask(__name__,template_folder="templates")
app.debug = True

=======================simple===========================
class RegisterForm(Form): name = simple.StringField( label="用户名", validators=[ validators.DataRequired() ], widget=widgets.TextInput(), render_kw="class":"form-control", default="haiyan" ) pwd = simple.PasswordField( label="密码", validators=[ validators.DataRequired(message="密码不能为空") ] ) pwd_confim = simple.PasswordField( label="重复密码", validators=[ validators.DataRequired(message=\'重复密码不能为空.\'), validators.EqualTo(\'pwd\',message="两次密码不一致") ], widget=widgets.PasswordInput(), render_kw=\'class\': \'form-control\' )

  ========================html5============================ email
= html5.EmailField( #注意这里用的是html5.EmailField label=\'邮箱\', validators=[ validators.DataRequired(message=\'邮箱不能为空.\'), validators.Email(message=\'邮箱格式错误\') ], widget=widgets.TextInput(input_type=\'email\'), render_kw=\'class\': \'form-control\' )

  ===================以下是用core来调用的======================= gender
= core.RadioField( label="性别", choices=( (1,""), (1,""), ), coerce=int #限制是int类型的 ) city = core.SelectField( label="城市", choices=( ("bj","北京"), ("sh","上海"), ) ) hobby = core.SelectMultipleField( label=\'爱好\', choices=( (1, \'篮球\'), (2, \'足球\'), ), coerce=int ) favor = core.SelectMultipleField( label="喜好", choices=( (1, \'篮球\'), (2, \'足球\'), ), widget = widgets.ListWidget(prefix_label=False), option_widget = widgets.CheckboxInput(), coerce = int, default = [1, 2] ) def __init__(self,*args,**kwargs): #这里的self是一个RegisterForm对象 \'\'\'重写__init__方法\'\'\' super(RegisterForm,self).__init__(*args, **kwargs) #继承父类的init方法 self.favor.choices =((1, \'篮球\'), (2, \'足球\'), (3, \'羽毛球\')) #吧RegisterForm这个类里面的favor重新赋值 def validate_pwd_confim(self,field,): \'\'\' 自定义pwd_config字段规则,例:与pwd字段是否一致 :param field: :return: \'\'\' # 最开始初始化时,self.data中已经有所有的值 if field.data != self.data[\'pwd\']: # raise validators.ValidationError("密码不一致") # 继续后续验证 raise validators.StopValidation("密码不一致") # 不再继续后续验证 @app.route(\'/register\',methods=["GET","POST"]) def register(): if request.method=="GET": form = RegisterForm(data=\'gender\': 1) #默认是1, return render_template("register.html",form=form) else: form = RegisterForm(formdata=request.form) if form.validate(): #判断是否验证成功 print(\'用户提交数据通过格式验证,提交的值为:\', form.data) #所有的正确信息 else: print(form.errors) #所有的错误信息 return render_template(\'register.html\', form=form) if __name__ == \'__main__\': app.run()
复制代码

register.html

复制代码
<body>
<h1>用户注册</h1>
<form method="post" novalidate style="padding:0  50px">
    % for item in form %
    <p>item.label: item item.errors[0] </p>
    % endfor %
    <input type="submit" value="提交">
</form>
</body>
复制代码

 3、meta

复制代码
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from flask import Flask, render_template, request, redirect, session
from wtforms import Form
from wtforms.csrf.core import CSRF
from wtforms.fields import core
from wtforms.fields import html5
from wtforms.fields import simple
from wtforms import validators
from wtforms import widgets
from hashlib import md5

app = Flask(__name__, template_folder=\'templates\')
app.debug = True


class MyCSRF(CSRF):
    """
    Generate a CSRF token based on the user\'s IP. I am probably not very
    secure, so don\'t use me.
    """

    def setup_form(self, form):
        self.csrf_context = form.meta.csrf_context()
        self.csrf_secret = form.meta.csrf_secret
        return super(MyCSRF, self).setup_form(form)

    def generate_csrf_token(self, csrf_token):
        gid = self.csrf_secret + self.csrf_context
        token = md5(gid.encode(\'utf-8\')).hexdigest()
        return token

    def validate_csrf_token(self, form, field):
        print(field.data, field.current_token)
        if field.data != field.current_token:
            raise ValueError(\'Invalid CSRF\')


class TestForm(Form):
    name = html5.EmailField(label=\'用户名\')
    pwd = simple.StringField(label=\'密码\')

    class Meta:
        # -- CSRF
        # 是否自动生成CSRF标签
        csrf = True
        # 生成CSRF标签name
        csrf_field_name = \'csrf_token\'

        # 自动生成标签的值,加密用的csrf_secret
        csrf_secret = \'xxxxxx\'
        # 自动生成标签的值,加密用的csrf_context
        csrf_context = lambda x: request.url
        # 生成和比较csrf标签
        csrf_class = MyCSRF

        # -- i18n
        # 是否支持本地化
        # locales = False
        locales = (\'zh\', \'en\')
        # 是否对本地化进行缓存
        cache_translations = True
        # 保存本地化缓存信息的字段
        translations_cache = 


@app.route(\'/index/\', methods=[\'GET\', \'POST\'])
def index():
    if request.method == \'GET\':
        form = TestForm()
    else:
        form = TestForm(formdata=request.form)
        if form.validate():
            print(form)
    return render_template(\'index.html\', form=form)


if __name__ == \'__main__\':
    app.run()
复制代码

 

wtformsinflask(wtforms在flask中的应用)(代码片段)

WTFormsWTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证。安装wtforms:pip3/pipinstallwtforms 用户登录/注册示例项目目录结构flask-wtforms-example│app.py│└─templatesadd_user.htmlindex.htmllogin.htmlregister.htmlusers.html& 查看详情

flask第七篇flask中的wtforms使用

一、简单介绍flask中的wtformsWTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证。安装:pip3installwtforms二、简单使用wtforms组件1、用户登录具体代码:fromflaskimportFlask,render_template,request,redirectfromwtforms.fieldsimp... 查看详情

flask-wtforms(代码片段)

...过form.errors来获取具体的错误信息示例代码如下RegistForm类中的代码 查看详情

flask框架中使用wtforms(代码片段)

一、什么是wtformsWTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证。安装:pip3installWTForms二、简单使用wtforms组件(一)用户登陆验证py文件代码:fromflaskimportFlask,render_template,request,redirectfromwtforms.fieldsimpo... 查看详情

6---flask-wtforms(代码片段)

6、Flask-WTForms Flask-WTF是简化了WTForms操作的一个第三方库。WTForms表单的两个主要功能是验证用户提交数据的合法性以及渲染模板。还有其它一些功能:CSRF保护,文件上传等。安装方法:pipinstallflask-wtf1.1.WTForms简单验证fromflaski... 查看详情

flask-论坛开发-4-知识点补充(代码片段)

...教程:http://study.163.com/course/courseLearn.htm?courseId=10040910021.WTForms表单使用WTForms是一个支持多web框架的一个插件,主要功能有两个:第一个是做表单的验证,验证用户提交上来的信息是否合法,第二个是模板渲染。1.1WTForms表单验证... 查看详情

flask-wtforms简单使用(代码片段)

安装wtforms2.2.1直接上代码:app.py文件:fromflaskimportFlask,render_template,requestfromwtformsimportForm,validatorsfromwtforms.fieldsimportsimple,core#form字段设计classRegForm(Form):#simple字段类型#StringField和TextAreaField都是字符串的意思,StringField支持的类型少于St... 查看详情

flask第三方插件wtforms(代码片段)

...大,但是基本的功能还是可以有的,下面就来使用一哈. WTForms介绍使用class的形式生成form表单,并可以对提交的数据做检验,然后对数据进行保存 下载WTForms  使用WTForms既然是使用class的形式,那肯定要有一个class了fromwtfo... 查看详情

flask:在另一个页面上使用wtform,而不是渲染表单本身(代码片段)

我有以下设置:渲染页面:@app.route('/one',methods=['GET'])defone():form=AnyForm()returnrender_template('form.html',form=form)模板(剥离到基本):wtf.quick_form(form,action=url_for('two'))路线/功能包括逻辑@app.route('/two',meth 查看详情

使用flask和WTForms在一个页面中的多个表单

】使用flask和WTForms在一个页面中的多个表单【英文标题】:MultipleformsinasinglepageusingflaskandWTForms【发布时间】:2013-08-1920:28:52【问题描述】:我在同一页面上有多个表单将发布请求发送到同一处理程序在烧瓶中。我正在使用wtforms... 查看详情

flask--wtforms(代码片段)

简介WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证。安装:pip3installwtforms用户登录注册示例1.用户登录当用户登录时候,需要对用户提交的用户名和密码进行多种格式校验。如:用户不能为空;用户... 查看详情

wtforms(代码片段)

一、简单介绍flask中的wtformsWTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证。安装:pip3installwtforms用户登录简例:fromflaskimportFlask,render_template,request,redirectfromwtforms.fieldsimportcorefromwtforms.fieldsimporthtml 查看详情

flask框架:运用wtforms实现用户注册(代码片段)

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

flask信号和wtforms(代码片段)

一、信号1.1.所有内置信号request_started=_signals.signal(‘request-started‘)#请求到来前执行request_finished=_signals.signal(‘request-finished‘)#请求结束后执行before_render_template=_signals.signal(‘before-render-template‘)#模板渲 查看详情

flask-wtforms(代码片段)

简介WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证。安装:1pip3installwtforms用户登录注册示例1.用户登录当用户登录时候,需要对用户提交的用户名和密码进行多种格式校验。如:用户不能为空;用户... 查看详情

85flask之wtforms

...件的使用自定义From组件 一、wtforms组件的使用1、flask中的wtformsWTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证。安装:pip3installwtforms2、wtforms组件的使用之登录验证1)图示2)manage.pyfromflaskimportFlask,... 查看详情

flask表单(代码片段)

...显示错误提示,还要获取并保存数据。幸运的是,强大的WTForms可以帮我们解决这些问题。WTForms是一个使用Python编写的表单库,它使得表单的定义、验证(服务器端)和处理变得非常轻松。这一章我们会介绍在Web程序中处理表单... 查看详情

在flask框架中,对wtforms的selectmultiplefield的一个报错处理(代码片段)

先粘贴代码:form.py文件:users=SelectMultipleField(label="请选择用户",validators=[DataRequired("请输入用户列表!")],coerce=int,choices=[],description="权限列表",render_kw="class":"form-control")views.py文件:部分代码:user_list=User 查看详情