0

我需要这个自定义验证在变形工作的“请求”:

def d_validator(node, value):
    if not value:
        raise Invalid(node, 'Enter a Password')
    if len(value) < 5:
        raise Invalid(node, 'Invalid Length')
    userid = authenticated_userid(userrequest)
    dbsession = DBSession()
    userInfo = dbsession.query(User).filter(_and(User.id==userid, User.password == value)).first()
    if not userInfo:
        raise Invalid(node, 'Invalid password')

所以我尝试了这个:

class Form(field.Field):
    def __init__(self, schema, **kw):
        self.saved_user = kw.pop('userrequest')
        log.info(self.saved_user)
        super(Form, self).__init__(schema, **kw)

进而:

Form(schema, buttons=('Actualizar',), 'userrequest'=request)

但我得到 SyntaxError: 关键字不能是表达式

我知道这可能与python有关,请多多包涵,在此先感谢

4

1 回答 1

1

关键字确实不是表达式,'userrequest'=request 而是. 删除引号:

Form(schema, buttons=('Actualizar',), userrequest=request)

另外,为什么你的自定义Form类基于field.Field?我自己还没有使用过变形,但快速浏览一下文档强烈建议你应该继承自deform.Form

最后但并非最不重要的一点是,您可以改用金字塔线程本地请求

def d_validator(node, value):
    if not value:
        raise Invalid(node, 'Enter a Password')
    if len(value) < 5:
        raise Invalid(node, 'Invalid Length')
    userid = authenticated_userid(get_current_request())
    dbsession = DBSession()
    userInfo = dbsession.query(User).filter(_and(User.id==userid, User.password == value)).first()
    if not userInfo:
        raise Invalid(node, 'Invalid password')

是的,这通常不受欢迎,但在您的情况下可能更容易处理。

于 2012-07-17T19:27:24.783 回答