为限制用户尝试使用错误的凭据登录的次数,我尝试从今天(最好在最近的10分钟内)输入的数据库中检索条目,并检查是否成功'是对还是错。
但是,我无法按日期检索条目。我正在打印一个列表,其中应该包含什么,现在它应该是一个很长的列表,并且一直返回空白。我应该如何找回它们?
在无法检查整个datetime
中最近十分钟内输入的条目之后,我简单地返回到今天检查条目以查看是否可以得到任何结果。
我尝试使用'regular'filter_by
方法并使用extract方法,但两者都完全变空了(请参阅发布的代码)。它不会返回错误或任何内容,列表只是保持为空。
login.attempt = datetime.date.today() # this is the database entry I need to check for.
logins_today = DBLogin.query.filter_by(attempt = datetime.date.today()).all()
logins_today = DBLogin.query.filter(extract('day', DBLogin.attempt) == datetime.date.today()).all()
我希望得到一个列表,其中包含与今天的日期匹配的数据库条目,但是我现在得到的是一个空列表。
答案 0 :(得分:0)
我已经找到解决我特定问题的方法。它并不是我所希望的那样理想,但是它可以达到我想要的目标。我将其张贴在这里,以防其他人遇到类似的问题
我不是在尝试检索与搜索匹配的所有条目并将它们放在列表中,而是在处理第一个条目。这确实意味着我无法检查时间范围内的尝试次数,因此我在数据库中引入了一个额外的变量,称为“数字”,我可以对其进行跟踪和计数,因为list与其他变量一起使用。
然后,我使用用户再次调用该函数的时间,并创建一个称为sum的var,它是当前日期时间-来自数据库的日期时间。最后,我使用timedelta来检查时间是否超过5分钟 现在,我可以检查时间是否已经过去,并在数据库中重置“ number”变量,以便在成功登录时重置用户的失败登录。
当然,我们确实希望能够看到用户登录是否仅在保护暴力攻击之外是否成功,所以我在数据库中还有一个名为“成功”的变量,它是一个布尔值,它不具有“用户成功登录后,请重新设置。
我希望有人认为该解决方案很有帮助,因为我在这个问题上苦苦挣扎,并且从StackOverflow上已经存在的问题和评论中找不到合适的解决方案。