我需要在变形中进行此自定义验证的“请求”才能工作:
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有关,请耐心等待,提前谢谢
答案 0 :(得分:1)
关键字确实不是表达式,但'userrequest'=request
是。删除引号:
Form(schema, buttons=('Actualizar',), userrequest=request)
另外,为什么要将自定义Form
课程设在field.Field
上?我还没有使用变形,但是从documentation建议强烈快速浏览一下,您应该继承deform.Form
。
最后但并非最不重要的一点是, 可以3>代替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')
是的,这通常是不受欢迎的,但在您处理的情况下可能更容易。