【问题标题】:Flask session variable does not keep values from one call to the otherFlask 会话变量不保留从一个调用到另一个调用的值
【发布时间】:2018-01-20 08:12:10
【问题描述】:

我一直试图让它工作一段时间,但我不知道该尝试什么。我制作了一个 Flask 应用程序,现在正在 localhost 上对其进行测试。我在 localhost:8000 上为我的客户端运行一个服务器,在 localhost:8080 上为 Flask 应用程序运行另一个服务器,然后我使用 flask-cors 来启用跨域请求。一切似乎都很好,该应用程序完成了它的工作。但是,在将值存储在其session 中时,它突然失败了。以下是代码的关键部分:

def retrieve_tokens(self, session, code):
    # Get tokens from ORCID given a request code
    headers = {'Accept': 'application/json'}
    payload = dict(self._details)
    payload.update({
        'grant_type': 'authorization_code',
        'code': code,
    })

    try:
        r = post(self._url + 'oauth/token',
                 data=payload, headers=headers)
    except ConnectionError:
        return None

    # Save them (if no error has occurred)
    rjson = r.json()
    if 'error' not in rjson:
        print rjson
        session['login_details'] = rjson
        print session['login_details']

    return r.json()

def get_tokens(self, session, code=None):
    # Retrieve existing tokens, or ask for new ones
    if 'login_details' in session and code is None:
        print session['login_details']
        return session['login_details']
    elif code is not None:
        # Retrieve them
        return self.retrieve_tokens(session, code)
    else:
        # Something went wrong
        return None

如您所见,其中有一些print 调试调用。当retrieve_tokens 被调用时,一切正常;最重要的是,第二个print 给出了与第一个相同的结果(即,具有所有请求令牌的 JSON 对象)。然而get_tokens 顽固地返回None。任何线索我可能做错了什么?我排除了一些事情:

  • 我的app_secret 已设置好,应该没问题。我使用静态文件,从 JSON 文件加载(这样我就可以将它放入 .gitignore 用于我的存储库)
  • 设置 SERVER_NAME 没有帮助
  • 在主文件中导入 session 并将其传递给这些函数(位于另一个文件中)而不是直接在外部文件中导入它不会改变任何内容
  • 在更改值后使用 session.modified = True 不会改变任何内容

我可以尝试什么?似乎没有任何效果。在 localhost 上运行是否有问题?一个错误?如果有帮助,我在 Ubuntu 16.04 上使用 Chrome。

【问题讨论】:

  • 我想改标题“如何同步两台服务器?”
  • 开枪,我没想到,也许在两个不同的服务器上运行这个东西会产生问题?我这样做是因为我不知道如何在本地测试它,但在实际用例中它不会是这样的。无论如何不要改变问题,因为那不是我想做的,但这可能是我的问题的原因。

标签: python session flask


【解决方案1】:

问题在于您在 if 语句中分配了一个值。因此,如果未给出 if 语句的条件,您将不会分配稍后将使用的值,并且您的代码将因此而失败。尝试通过 if-else 语句更改 if 语句,以确保 session 的该字段将具有值。

【讨论】:

  • 正如所写,这应该是一个评论。根据 SO 指南,答案需要包含解决问题所需的确切代码,而不仅仅是提示您何时应该尝试。请编辑以包含您的建议的代码实现。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-31
  • 2020-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-29
相关资源
最近更新 更多