当前位置:  开发笔记 > 编程语言 > 正文

在WTForms中使用HTML5字段

如何解决《在WTForms中使用HTML5字段》经验,为你挑选了1个好方法。

我正在使用Flask开发Web应用程序.我原来是手动编写HTML表单,然后切换到使用WTForms(这是一个教育项目,所以我展示了构建项目的每一步).

尝试添加HTML5表单字段时,我有点困惑,比如EmailField.我搜索了WTForms文档,并在线搜索,我无法找到如何使用HTML5 EmailField创建WTForm.

然后我安装了这个模块https://pypi.python.org/pypi/wtforms-html5,允许它,一切正常.但是我对添加额外的依赖感到不满意,特别是因为它似乎没有积极开发(https://github.com/brutus/wtforms-html5).

然后我结束了WTForms github页面,发现实际上支持所有新的HTML5字段,但默认情况下不会导入这些字段.https://github.com/wtforms/wtforms/blob/master/wtforms/fields/html5.py因此,而不是使用

from WTForms import EmailField

正如人们所推断的那样

from WTForms import TextField

一个人必须使用

from wtforms.fields.html5 import EmailField

我以前使用wtforms-html5模块如下

from wtforms_html5 import EmailField

因此,我更改了所有出现的内容wtforms_html5,wtforms.fields.html5并且我的应用程序完全按预期工作.

好的,感谢您阅读所有背景资料.现在提问:

为什么WTForms文档中没有提到任何html5字段(EmailField,DateField等)?

为什么这些字段默认情况下不会像其他字段一样导入WTForms

这些字段是否稳定/打算使用?

从WTForms导入字段的最佳做法是什么?

对于Text字段,我可以使用以下任何一种方法:

from wtforms import TextField
from wtforms.fields import TextField
from wtforms.fields.simple import TextField

但对于EmailField,我必须使用

from wtforms.fields.html5 import EmailField

我想要:

from wtforms.fields import TextField
from wtforms.fields import EmailField

但是这需要在fields [__init__][1]文件中添加一行,我不愿意这样做,因为它是一个教育项目,这只会让学习者感到困惑.

我在寻找

洞察为什么WTForms不记录或默认导入html5字段

有任何理由继续使用wtforms-html5第三方模块.

Crast.. 8

前言,我是作者之一,目前是WTForms的主要维护者

在我了解为什么我应该为使用WTForms的人们提到一个非常常见的模式之前,就是创建自己的模块,将所需的所有位组合成一个命名空间.

例如,myapp/forms.py你做了类似的事情:

from wtforms.fields import *
from wtforms import widgets, Form as _Form
from wtforms.fields.html5 import EmailField, 


class Form(_Form):
    """Awesome base form for myapp. Includes CSRF by default"""
    class Meta:
        csrf = True
        csrf_secret = 'secretpasswordhere'

        @property
        def csrf_context(self):
            return get_current_request().session

    # maybe add some methods you really wanted to have on your Form class

您可以使用以上内容:

from myapp.forms import Form, TextField, EmailField, ...

class UserForm(Form):
    name = TextField(...)
    email = EmailField(...)

或者像星球一样进口 from myapp.forms import *

您将注意到我还包括一个自定义表单子类,它设置CSRF并默认提供CSRF上下文,这不是绝对必要的.(顺便说一句,如果您使用的是烧瓶,Flask-WTF会为您设置类似的CSRF设置,但重点是说明如何轻松实现自己的集成.)


现在为什么.

WTForms的核心思想是提出一个非常简单,可靠的框架,适用于大多数用例,但是可扩展性足以让人们可以提供配套工具来处理特定的用例.

在早期,这样做的解决方案是将interop的扩展与各种库结合在一起.但这带来了一个问题,因为它极大地增加了测试的复杂性和表面区域,而且它会以奇怪的方式驱动WTForms版本(Django只是改变了这一点,现在你需要发布一个新的WTForms).所以在2015年,我们决定将所有扩展移动到他们自己的包中,以允许他们自己的发布时间表.

与其强迫人们使用一个试图完成所有事情的单一软件包,这已经形成了一个真正伟大的生态系统,其中包括Flask-WTF,WTForms-Alchemy和WTForms-Django等坚实的配套软件包.

至于HTML5类型没有记录的原因; 好吧,这是一个遗漏.还有一些历史:在某些时候,我们将默认的WTForms字段输出从XHTML样式切换为HTML紧凑语法; 但保留了核心领域的产出.因此,我们让人们回馈XHTML表单,人们贡献html5字段,以及希望默认字段使用HTML5类型的人,所有这些都在我们保证在主要版本中的向后兼容性之后,这迫使我们的手.


我知道这是一个很长的答案,也许简短的说法是:虽然WTForms通常可以与大多数Web框架一起使用,但它的设计是根据您的用途进行配置和定制的.一切都不插即用.



1> Crast..:

前言,我是作者之一,目前是WTForms的主要维护者

在我了解为什么我应该为使用WTForms的人们提到一个非常常见的模式之前,就是创建自己的模块,将所需的所有位组合成一个命名空间.

例如,myapp/forms.py你做了类似的事情:

from wtforms.fields import *
from wtforms import widgets, Form as _Form
from wtforms.fields.html5 import EmailField, 


class Form(_Form):
    """Awesome base form for myapp. Includes CSRF by default"""
    class Meta:
        csrf = True
        csrf_secret = 'secretpasswordhere'

        @property
        def csrf_context(self):
            return get_current_request().session

    # maybe add some methods you really wanted to have on your Form class

您可以使用以上内容:

from myapp.forms import Form, TextField, EmailField, ...

class UserForm(Form):
    name = TextField(...)
    email = EmailField(...)

或者像星球一样进口 from myapp.forms import *

您将注意到我还包括一个自定义表单子类,它设置CSRF并默认提供CSRF上下文,这不是绝对必要的.(顺便说一句,如果您使用的是烧瓶,Flask-WTF会为您设置类似的CSRF设置,但重点是说明如何轻松实现自己的集成.)


现在为什么.

WTForms的核心思想是提出一个非常简单,可靠的框架,适用于大多数用例,但是可扩展性足以让人们可以提供配套工具来处理特定的用例.

在早期,这样做的解决方案是将interop的扩展与各种库结合在一起.但这带来了一个问题,因为它极大地增加了测试的复杂性和表面区域,而且它会以奇怪的方式驱动WTForms版本(Django只是改变了这一点,现在你需要发布一个新的WTForms).所以在2015年,我们决定将所有扩展移动到他们自己的包中,以允许他们自己的发布时间表.

与其强迫人们使用一个试图完成所有事情的单一软件包,这已经形成了一个真正伟大的生态系统,其中包括Flask-WTF,WTForms-Alchemy和WTForms-Django等坚实的配套软件包.

至于HTML5类型没有记录的原因; 好吧,这是一个遗漏.还有一些历史:在某些时候,我们将默认的WTForms字段输出从XHTML样式切换为HTML紧凑语法; 但保留了核心领域的产出.因此,我们让人们回馈XHTML表单,人们贡献html5字段,以及希望默认字段使用HTML5类型的人,所有这些都在我们保证在主要版本中的向后兼容性之后,这迫使我们的手.


我知道这是一个很长的答案,也许简短的说法是:虽然WTForms通常可以与大多数Web框架一起使用,但它的设计是根据您的用途进行配置和定制的.一切都不插即用.

推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有