首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >deform验证中的"request“

deform验证中的"request“
EN

Stack Overflow用户
提问于 2012-07-18 03:25:39
回答 1查看 346关注 0票数 0

我需要deform中这个自定义验证的"request“才能工作:

代码语言:javascript
复制
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')

所以我试了一下:

代码语言:javascript
复制
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)

然后:

代码语言:javascript
复制
Form(schema, buttons=('Actualizar',), 'userrequest'=request)

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

我知道这可能与python有关,请耐心等待,提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-18 03:27:25

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

代码语言:javascript
复制
Form(schema, buttons=('Actualizar',), userrequest=request)

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

最后但并非最不重要的一点是,您可以转而使用pyramid thread-local request

代码语言:javascript
复制
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')

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11529444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档