Flask WTForms:DataRequired 和 InputRequired 之间的区别

     2023-02-23     27

关键词:

【中文标题】Flask WTForms:DataRequired 和 InputRequired 之间的区别【英文标题】:Flask WTForms: Difference between DataRequired and InputRequired 【发布时间】:2014-07-21 21:14:45 【问题描述】:

wtforms.valiadators中的DataRequiredInputRequired有什么区别

我的注册表单中有一些字段:

username
password 
password_repeat 
submit

这些字段应该使用DataRequiredInputRequired 验证器吗?

【问题讨论】:

【参考方案1】:

简答

除非你有充分的理由,否则你应该使用InputRequired

为什么?

让我们看看docs/code for DataRequired() 的一些注释:

请注意,这和 DataRequired 之间的区别在于 InputRequired 看起来提供了表单输入数据,而 DataRequired 则查看了强制转换后的数据。

注意此验证器曾经被称为 Required,但它的行为方式(需要强制数据,而不是输入数据)意味着它的运行方式与 Optional 验证器不对称并且还导致与某些字段混淆,这些字段将数据强制为“虚假”值,例如 0Decimal(0)time(0) 等。除非存在非常具体的原因,否则我们建议使用 :class: InputRequired 代替。

这是什么意思?

Form 类中,您会注意到两个关键字参数formdatadata。这些一般对应processprocess_formdata两种方法。当表单数据从网络中传入时,其格式并不总是对应于Field 类型。一个很好的例子就是将值u'1' 提供给IntegerField。如果您有一个 NumberRange 验证器,这将是个坏消息,因为 u'1' 不是数字。

process_formdata 方法的主要目的是通过在运行验证规则之前将值强制转换为其正确类型来防止这种情况。这就是他们说“查看强制转换后的数据”时所指的内容

问题!

InputRequiredDataRequired 的工作方式与 __call__ 的实现方式相同:

def __call__(self, form, field):
    if not field.data or isinstance(field.data, string_types) and not field.data.strip():
        if self.message is None:
            message = field.gettext('This field is required.')
        else:
            message = self.message

某些字段类型将数据强制转换为 Falsey 值(0、Decimal(0) 等)。当您有 IntegerField 并且表单提交像 '0' 这样的值时,就会出现问题。如果您对此应用DataRequired,它将无法通过验证。这是因为DataRequired 将在强制之后评估if not field.data...,其中field.dataFalsey 数值0

【讨论】:

感谢编辑我的问题,现在我没有足够的声望来投票。再次感谢您的详细回答 如果回答对您有帮助,您可以接受作为对未来访问者的指示 很好的解释@nsfyn55。一个问题。使用InputRequired()input_required() 有什么区别? @kevin 验证器可以是工厂函数或可调用类。 wtforms 文档说 input_required 到 InputRequired 的别名“允许您在将验证器从工厂移动到类时保持 API 兼容性,因此我们建议那些编写他们将共享的验证器。” wtforms.readthedocs.org/en/latest/…

Flask-WTForms 在我的项目目录中找不到 WTForms

】Flask-WTForms在我的项目目录中找不到WTForms【英文标题】:Flask-WTFormscan\'tfindWTFormsinmyprojectdirectory【发布时间】:2012-07-2708:38:54【问题描述】:这是我在***上的第一篇文章,大家好。我正在做博客应用程序来学习Python和Flask,我想... 查看详情

flask第七篇flask中的wtforms使用

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

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

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

flask之wtforms验证

...供了前端表单自动生成和前端表单提交数据验证的功能。WTForms支持的HTML标准字段字段对象说明StringField文本字段TextAreaField多行文本字段PasswordField密码文本字段HiddenField隐藏文本字段DateField文本字段,值为datetime.date格式 查看详情

flask-flask-script|多app应用|wtforms

flask-script用于实现类似于django中python3manage.pyrunserver...类似的命令安装>:pip3installflask-script使用manage.pyfromflaskimportFlask#1.导入Managerfromflask_scriptimportManager#2.实例化Flask生成对象appapp=Flask(__name__)#3 查看详情

flask-wtforms

what‘sthe WTForms  WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证。其作用是可以为轻量级的框架提供类似Django的form的功能。安装:pip3installwtforms 源码流程分析实例化流程分析#源码流程1.执行typ... 查看详情

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

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

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

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

flask之wtforms

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

使用 WTForms 字段列表

】使用WTForms字段列表【英文标题】:WorkingwithWTFormsFieldList【发布时间】:2011-08-2510:17:22【问题描述】:我通过Flask.WTF扩展将WTForms与Flask一起使用。不过,这个问题不是Flask特有的。WTForms包含一个FieldListfieldforlistsoffields。我想用... 查看详情

flask之wtforms源码分析

一、wtforms源码流程1、实例化流程分析1#源码流程21.执行type的__call__方法,读取字段到静态字段cls._unbound_fields中;meta类读取到cls._wtforms_meta中32.执行构造方法45a.循环cls._unbound_fields中的字段,并执行字段的bind方法,然后将返回值... 查看详情

动态选择 WTForms Flask SelectField

】动态选择WTFormsFlaskSelectField【英文标题】:DynamicchoicesWTFormsFlaskSelectField【发布时间】:2018-04-0522:01:45【问题描述】:我正在尝试使用FlaskForms将userID变量传递给WTForms。首先,我将展示可以正常工作的代码,然后是我需要修改的... 查看详情

flask--wtforms(代码片段)

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

flask:flask-script;多app应用;wtforms;sqlchmy

一. flask-script一.flask-script简介1.什么是flask-script:是一个让你的命令行支持自定义命令的工具,它为Flask程序添加一个命令行解释器。可以让我们的程序从命令行直接执行相应的程序(用于实现类似于django中python3manage.pyrunserver...... 查看详情

wtforms快速使用和源码分析(基于flask)

wtforms和django的form组件大同小异,下面给出一个应用举例以便快速查询。开始使用1fromflaskimportFlask,render_template,request,redirect23fromwtformsimportForm45fromwtforms.fieldsimportcore6fromwtforms.fieldsimporthtml57fromwtforms.fie 查看详情

flask学习第7篇:flask中的wtforms使用(代码片段)

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

自动完成 Flask wtforms

】自动完成Flaskwtforms【英文标题】:AutocompleteFlaskwtforms【发布时间】:2021-03-0413:59:44【问题描述】:我想使用数量和商品价格自动更新我的总金额字段?有没有办法使用没有javascript的烧瓶来做到这一点?我希望在输入数量和商... 查看详情

使用 Flask-WTForms,如何设置 html 表单部分的样式?

】使用Flask-WTForms,如何设置html表单部分的样式?【英文标题】:UsingFlask-WTForms,howdoIstylemyformsectionofthehtml?【发布时间】:2016-04-1618:04:56【问题描述】:我阅读了Flask-WTF极其简化的wiki,但对我能用它做什么并不太了解。我的印象... 查看详情