2016-05-04 8 views
0

これは、ユーザーがログインしようとする時間の数を追跡するために使用されるモーダルクラスです。ユーザーがログインに失敗するたびに、列フィールドを1ずつ増やしたいと思います。これを実行する最善の方法は何ですか。ユーザーがpython pyramidでログインに失敗するたびに列の値を1ずつ増やす方法

私はこれを今のところしようとしていますが、動作しておらず、異種のエラーが発生しています。 電子メールとステータスに基づいて試行列の値を取得するコード=成功したログイン後に発生する成功ユーザーがログインに失敗するたびに試行列が1ずつ増加するため。それから、試行回数を取得しています。ここで

@classmethod 
def getAttemptCount(cls,email): 
    return DBSession.query(Logs.attempt).filter(and_(Logs.email==email,Logs.status=='success')).all() 

テーブル定義

from .meta import Base 
from sqlalchemy import (
    Column, 
    Index, 
    Integer, 
    Text, 
    Unicode 
    ) 


class Logs(Base): 
    __tablename__ = 'logs' 
    id = Column(Integer, primary_key=True) 
    email = Column(Unicode(255),nullable=False) 
    status=Column(Text,default='error') 
    attempt=Column(Integer,default=0) 

は、これは私が私のログインビューの上に持っているもので、それを

答えて

1

を行うための最善の方法は何ですか、あなたはどのようにアイデアを与えるかもしれないですそれをするために。

@view_config(route_name="login", request_method="POST", renderer="app:templates/app/login.mak") 
def login_(request): 
email = request.params.get('email') 
password = request.params.get('password') 
if form.validate(): #valid fields i.e. not empty 
    try: 
     user = DBSession.query(User).filter_by(email=email).one() 
    except NoResultFound: 
     return #no user found 
    if len(user): 
     if user.attempt > 10: 
     return #show captcha or something  
     if not user.check(password): 
     user.attempt +=1 
     return #redirect or return False 
     headers = remember(request, user.id) 
     user.attempt = 0 #could reset the attempt count if login successful 
     return HTTPFound(location=request.route_url('dashboard'), headers=headers) 
関連する問題