如何在Plone 4.1中向注册表中添加额外字段(自定义验证码)
我正在尝试将自定义验证码添加到我的Plone站点的注册表中。我最近从3.1.x升级到4.1.3,这打破了我对join_表单模板和验证脚本的现有定制 我一直在尝试按照这个例子进行定制。我想我已经正确地遵循了这个示例,但是新字段没有被呈现到注册表中 我如何找出为什么没有显示额外的字段,以及有没有更好的方法向表单中添加自定义验证码 请注意,我确实尝试查看了Plone 4的其中一个验证码包,但我查看的那些包似乎非常复杂(其中一个包的零件散落在3个包中) 更新:显然使用stock collective.examples.userdata对我也不起作用。我添加了collective.examples.userdata,在@@register表单上没有任何其他字段如何在Plone 4.1中向注册表中添加额外字段(自定义验证码),plone,Plone,我正在尝试将自定义验证码添加到我的Plone站点的注册表中。我最近从3.1.x升级到4.1.3,这打破了我对join_表单模板和验证脚本的现有定制 我一直在尝试按照这个例子进行定制。我想我已经正确地遵循了这个示例,但是新字段没有被呈现到注册表中 我如何找出为什么没有显示额外的字段,以及有没有更好的方法向表单中添加自定义验证码 请注意,我确实尝试查看了Plone 4的其中一个验证码包,但我查看的那些包似乎非常复杂(其中一个包的零件散落在3个包中) 更新:显然使用stock collective.e
另外,如果有什么不同,我会使用旧的plone 3回退模板。我不知道最好的答案,但如果您还没有发现,我们已经在上讨论过。这个示例使用了优秀的小部件,但一般方法可以应用于许多其他情况 基本上,您不想在用户数据模式中定义captcha字段;相反,在呈现表单时,您希望通过以下方式将其临时添加到表单架构: 浏览器/界面.py
from zope.interface import Interface
from quintagroup.formlib.captcha import Captcha
from my.package import myMessageFactory as _
class IMyRegistrationForm(Interface):
"""Marker interface for my custom registration form
"""
class ICaptchaSchema(Interface):
captcha = Captcha(
title=_(u'Verification'),
description=_(
u'Type the code from the picture shown below.'
),
)
浏览器/forms.py
from zope.formlib import form
from plone.app.users.browser.register import RegistrationForm
from quintagroup.formlib.captcha import CaptchaWidget
from my.package.browser.interfaces import IMyRegistrationForm, ICaptchaSchema
class MyRegistrationForm(RegistrationForm):
""" Subclass the standard registration form
"""
implements(IMyRegistrationForm)
@property
def form_fields(self):
# Get the fields so we can fiddle with them
myfields = super(MyRegistrationForm, self).form_fields
# Add a captcha field to the schema
myfields += form.Fields(ICaptchaSchema)
myfields['captcha'].custom_widget = CaptchaWidget
# Perform any field shuffling here...
# Return the fiddled fields
return myfields
最后,在浏览器/configure.zcml中注册自定义注册表:
<configure
xmlns="http://namespaces.zope.org/zope"
xmlns:browser="http://namespaces.zope.org/browser"
i18n_domain="my.package">
<browser:page
name="register"
for="Products.CMFPlone.Portal.PloneSite"
class=".forms.MyRegistrationForm"
permission="zope.Public"
/>
</configure>
使用collective.examples.userdata和Plone 4.1进行测试,谢谢,但重点是recaptcha。我特别不想使用recaptcha,因为它并不比没有验证码好多少。我有一个自定义的,我升级到4.1之前使用的,我想适应该网站。我在想,既然我需要一个额外的日期字段,我可以使用一个修改过的collective.examples.userdata,但是这个额外的字段没有显示在注册表表上。你能提供你编写的代码的重要部分吗,这样我们就可以看到已经有什么和缺少什么了?Giacomo Spettoli:查看我关于股票的更新collective.examples.userdata不工作。这与我想要的最接近。请注意,我必须将配置添加到collective.examples.userdata/configure.zcml,而不是browser/configure.zcml才能使其工作。它还添加了密码提示,而不是先发送确认电子邮件(这是我想要的)。关于我的最后一条评论,切换@安全控制面板的“安全”选项卡上的“让用户选择自己的密码”设置不会改变任何事情。我想我需要做些别的事情来保持这个设置。啊
myfields=super(RegistrationForm,self)。form\u fields
应该是myfields=super(MyRegistrationForm,self)。form\u fields
在浏览器/forms.py中。我假设您已经将collective.examples.userdata作为自己的包,并按照惯例将表单浏览器视图代码放在browser/中。