2012-07-17 111 views
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:关键字不能是一个表达式

我知道这相关的可能是蟒蛇,多多包涵,谢谢提前

回答

1

关键词确实没有表情,但'userrequest'=request。删除引号:

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

而且,你为什么在field.Field基础自定义Form类?我自己还没有使用过变形,但是从快速浏览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') 

是的,这往往是令人难以接受的,但可能是你的情况来处理更容易。

+0

谢谢,这是我的问题之一,但不知道如何重写Form类,现在它不显示我的提交按钮,也许可以帮助我? – 2012-07-17 20:20:56

+0

是的,我稍后改变了它的形式,但遇到问题存在自我,或在这种情况下的变量。我是新的python和这个python web开发,来自php,反正我结束了与get_current_request解决方案,并正常工作。稍后我会尝试更好的方法。谢谢。 – 2012-07-18 21:04:50