变形验证中的“请求”

时间:2012-07-17 19:25:39

标签: python pyramid deform

我需要在变形中进行此自定义验证的“请求”才能工作:

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有关,请耐心等待,提前谢谢

1 个答案:

答案 0 :(得分:1)

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

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

另外,为什么要将自定义Form课程设在field.Field上?我还没有使用变形,但是从documentation建议强烈快速浏览一下,您应该继承deform.Form

最后但并非最不重要的一点是, 可以代替pyramid thread-local request

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')

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