每当用户无法在python金字塔中登录时,如何将列值增加1

时间:2016-05-04 09:23:10

标签: python sqlalchemy 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 个答案:

答案 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)