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が発生します:キーワードを式にすることはできません

私はこれがPythonに関連している可能性があることを知っています、私に耐えてください、事前に感謝します

4

1 に答える 1

1

キーワードは確かに表現ではありませんが、'userrequest'=request です。引用符を削除します。

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

また、なぜカスタムFormクラスをベースにしているのfield.Fieldですか?私はまだdeformを使用していませんが、ドキュメントを一目見ただけで、代わりに継承する必要があることが強くわかります。deform.Form

最後になりましたが、代わりにピラミッドスレッドローカルリクエストにフォールバックできます。

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

はい、これはしばしば眉をひそめますが、あなたの場合は扱いやすいかもしれません。

于 2012-07-17T19:27:24.783 に答える