我正在开发一个要求用户登录的应用程序。 它是用于浏览和使用流行电子邮件客户端的终端浏览器。

我正在努力使用户真正登录而不会感到混乱。 我将尝试解释我要在psedueo代码中实现的目标,然后演示我目前已完成的工作。

username = 'joe@example.com'
password = 'itsasecret'

# User has logged in before using our application. Instead of
# logging in via HTTP, just inject the cookies into the session.
if userExistsInDatabase:
    session.addCookies(db.getCookies(username))

     # Check the session is still valid. Just because we load
     # the cookie from the database doesn't mean it's valid as
     # the account could be blocked, or session could have expired
     if session.checkIfSessionIsValid():
         print 'Logged In'
     else:
         # Login failed, now we need to do a HTTP request
         # incase the session has died
         if session.login(username, password):
             # Login success
         else:
             # Login Failed
else:
    # No session exists in DB, try to log in and add user to db
    if session.login(username, password):
         # Login success
    else:
         # Login Failed

我希望代码能比我用语言更好地解释它。 但是,我遇到的问题是,一切都变得混乱和快速,每当我需要使用它时都不得不重复这段代码是很痛苦的。

这是我在很多项目中经常做的事情,因为大多数HTTP站点,至少是大型HTTP站点,都具有类似的登录流程。

有什么建议吗? 如果您需要更多信息,请询问。

#1楼 票数:1 已采纳

假设支持代码正确地使用了异常,则可以通过减少重复代码来解决此问题:

class Session():
    def reconnect(self, username):
        try:
            cookie = db.getCookies(username)
        except LookupError:
            raise UserDoesNotExist
        else:
            self.addCookies(cookie)
            if not self.checkIfSessionIsValid():
                raise InvalidSession

    def login(self, ...):
        if not do_the_login(...):
            raise LoginError

try:
    try:
        session.reconnect(...)
    except (InvalidSession, UserDoesNotExist):
        session.login(...)
except LoginError:
    # failed


# at this point, either an unhandled exception terminated 
# this code path or we are logged in.

  ask by James Jeffery translate from so

未解决问题?本站智能推荐:

3回复

Python:处理流程避免嵌套的IF语句

我有一个过程(类),我将其分为几个步骤(方法)。 如果上一步成功,则只能调用每个步骤。 我创建了一个方法run(),通过在调用下一个步骤之前检查每个步骤来运行该过程: 有没有更优雅的方法(设计模式?)来避免这些嵌套的IF语句? 非常感谢,
1回复

用于计算流程的PythonOOP设计模式

我对 oop 比较陌生,并且有一个关于对某种类型的计算进行编码的最佳方法的快速问题。 我很好奇是否有一个既定的设计模式来解决这类问题。 考虑化学工艺流程,您将具有温度、压力、流速等属性的材料 (a,b) 转换为最终产品 c。 为了到达那里,我需要单位操作 D、E、F... 每个都有自己的一组属性(成
1回复

引发异常作为http响应

我正在使用 django 和 vue 编写程序员。 我可以将异常作为http响应引发,因此我可以在任何地方引发异常,并且不需要在django视图函数中捕获它,然后将其重新组合成一个新的http响应。 伪代码 在引发 ExceptionAsHttpResponse 之后,前端可以获取状态和原因
1回复

需要了解__init__,__new__和__call__的流程

我从Ben对Python使用__new__和__init__的问题的答案中复制了这段代码? 并修改了一下。 但是,我不知道这个流程。 虽然我从更高层次了解此代码的目的是什么。 但是,在内部如何运作,我不太确定。 运行此代码时,我得到以下输出: - 我无法理解__init__和_
1回复

SQLAlchemy声明:如何合并模型和现有业务逻辑类

我想知道在业务逻辑代码中使用SQLALchemy声明性模型的最佳实践。 也许stackexchange.codereview可能是一个更好的地方问这个,但我不确定。 这是一些背景知识。 假设我有很多课程在做各种各样的事情。 它们中的大多数彼此很少或者没有任何关系。每个类都有一百到一千
1回复

设计模式/解决方案,用于逻辑相似的功能,无需重复代码

我正在寻找以下(通用)问题的理想解决方案。 我想实现几种协议来访问文件。 假设ftp和tftp。 将来可能会添加更多。 现在我在做: 同样适用于put_file() , ls()和更多功能。 随着代码的增长,这开始变得丑陋。 所以我的问题是:是否有更聪明的方法来完成这项工作?
1回复

如何处理挂起的子线程?

我有一个从使用多个挂起线程的API中提取数据的过程。 主线程启动子线程并等待,直到进行了N个API调用并且所有子线程都结束为止; 1个子线程在队列中填充需要对API进行的调用; 8个子线程执行API调用。 当其中一个API调用挂起时(不幸的是,我无法控制超时),子线程永远不
3回复

如何为两个完全相同但实体不同的类归纳逻辑?

我的项目中有两个类:首先对comments ,其次对alerts : AlertFilterService和CommentFilterService 它们具有几乎完全相同的构造函数和完全相同的方法签名,例如do_somethig_for_alerts(self)和do_something_f