2012-07-17 3 views
0

은 내가 작업으로 변형이 지정 유효성 검사의 "요청"을 필요"요청"

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) 

다음 :

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

그래서 난이 시도
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 클래스를 재정의하는 방법을 모르겠다. 제출 버튼을 표시하지 않아서 도움이 될만한가? –

+0

예 Form에 대해 나중에 변경했지만 자체 또는 해당 컨텍스트의 변수에 액세스하는 데 문제가 있습니다. 나는 파이썬과 파이썬 웹 개발에 익숙하지 않다. 어쨌든 나는 get_current_request 솔루션으로 그것을 끝내고 잘 동작한다. 얼마 후 나는 더 나은 방법을 시도 할 것입니다. 감사. –