Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将HTML5字段与WTForms一起使用_Python_Html_Flask_Wtforms_Flask Wtforms - Fatal编程技术网

Python 将HTML5字段与WTForms一起使用

Python 将HTML5字段与WTForms一起使用,python,html,flask,wtforms,flask-wtforms,Python,Html,Flask,Wtforms,Flask Wtforms,我正在使用Flask开发一个web应用程序。我最初是手工制作HTML表单,然后改用WTForms(这是一个教育项目,所以我展示了构建项目的每个步骤) 我在尝试添加HTML5表单字段(如EmailField)时有点困惑。我在网上搜索了WTForms文档,但找不到如何使用HTML5电子邮件字段创建WTForm 然后我安装了这个模块,它允许它,一切都正常。但我对添加额外的依赖项感到不高兴,特别是因为它似乎没有被积极开发() 然后,我在WTForms github页面上结束,发现实际上支持所有新的HTM

我正在使用Flask开发一个web应用程序。我最初是手工制作HTML表单,然后改用WTForms(这是一个教育项目,所以我展示了构建项目的每个步骤)

我在尝试添加HTML5表单字段(如EmailField)时有点困惑。我在网上搜索了WTForms文档,但找不到如何使用HTML5电子邮件字段创建WTForm

然后我安装了这个模块,它允许它,一切都正常。但我对添加额外的依赖项感到不高兴,特别是因为它似乎没有被积极开发()

然后,我在WTForms github页面上结束,发现实际上支持所有新的HTML5字段,但默认情况下不会导入这些字段。因此,与其使用

from WTForms import EmailField
正如人们可以从中推断的那样

from WTForms import TextField
而必须使用

from wtforms.fields.html5 import EmailField
我之前使用的wtforms-html5模块如下

from wtforms_html5 import EmailField
因此,我将所有出现的
wtforms\u html5
更改为
wtforms.fields.html5
,并且我的应用程序完全按照预期工作

好的,谢谢你阅读所有的背景资料。现在回答问题:

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

  • 为什么这些字段没有像其他字段一样默认导入WTForms

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

  • 从WTForms导入字段的最佳实践是什么

对于文本字段,我可以使用以下任一选项:

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
但这需要在字段
[\uuu init\uuu][1]
文件中添加一行,我不愿意这样做,因为这是一个教育项目,这只会让学习者感到困惑

我在找

  • 了解WTForms为什么不记录或默认导入html5字段
  • 任何继续使用wtforms-html5第三方模块的原因
前言,我是WTForms的作者之一,目前是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(...)
或者从myapp.forms import*

您会注意到,我还包括一个自定义表单子类,它设置CSRF并默认提供CSRF上下文,这不是严格必需的。(顺便说一句,如果您使用的是flask,您也可以使用类似的CSRF设置,但重点是说明如何轻松实现自己的集成。)


现在是为什么

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

早期,解决方案是合并各种库以实现互操作。但这带来了一个问题,因为它极大地增加了测试的复杂性和表面积,而且还会以奇怪的方式推动WTForms的发布(Django刚刚改变了这一点,现在您需要发布一个新的WTForms)。因此,在2015年,我们决定将所有扩展迁移到他们自己的包中,以允许他们有自己的发布时间表

这并没有强迫人们使用一个单一的软件包来尝试做任何事情,而是形成了一个真正伟大的生态系统,其中包括一些可靠的配套软件包

至于为什么HTML5类型没有文档化;嗯,这是一个遗漏。还有一些历史记录:在某个时候,我们将默认的WTForms字段输出从XHTML样式切换到HTML紧凑语法;但保留了核心现场输出。因此,我们让人们贡献了XHTML表单,贡献了html5字段,人们希望默认字段使用html5类型,所有这些都是在我们保证了主要版本中的向后兼容性之后,这让我们的手有点紧张


我知道这是一个很长的答案,也许最简单的说法是:虽然WTForms通常可以与大多数现成的web框架一起工作,但它的设计是根据您的用途进行配置和定制的;不是什么都可以即插即用。

本文作者。只是简单介绍一下这个项目:从某种意义上说,它“没有得到维护”,它对我有效,我不需要添加任何内容。由于香草WTForms开始支持所有这些东西,我建议只使用普通WTForms


如果您希望为小部件自动生成一些渲染关键字,当前版本将删除所有字段和小部件,这些字段和小部件现在也由WTForms支持,而是使用一个处理这些字段和小部件的窗体元类。

感谢您提供了非常有用和详细的答复。文档也在github上吗?我很乐意做一个简短的总结,并在“字段”部分添加一个小节,其中提到HTML5字段是可用的,以及如何访问它们——如果您和其他维护人员资源太少而无法访问的话。我想现在很多人可能都在遵循我的路线,安装(或编写)第三方pip包来重新添加这些字段。