Python 将HTML5字段与WTForms一起使用
我正在使用Flask开发一个web应用程序。我最初是手工制作HTML表单,然后改用WTForms(这是一个教育项目,所以我展示了构建项目的每个步骤) 我在尝试添加HTML5表单字段(如EmailField)时有点困惑。我在网上搜索了WTForms文档,但找不到如何使用HTML5电子邮件字段创建WTForm 然后我安装了这个模块,它允许它,一切都正常。但我对添加额外的依赖项感到不高兴,特别是因为它似乎没有被积极开发() 然后,我在WTForms github页面上结束,发现实际上支持所有新的HTML5字段,但默认情况下不会导入这些字段。因此,与其使用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
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第三方模块的原因
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包来重新添加这些字段。