Python Flask会话变量不保留从一个调用到另一个调用的值

Python Flask会话变量不保留从一个调用到另一个调用的值,python,session,flask,Python,Session,Flask,我已经试着让它工作了一段时间了,我不知道该怎么做。我制作了一个Flask应用程序,现在正在localhost上进行测试。我在localhost:8000上为我的客户机运行一台服务器,在localhost:8080上为Flask应用程序运行另一台服务器,然后使用Flask cors启用跨域请求。一切似乎都很好,应用程序完成了它的工作。然而,当它在会话中存储值时,它突然失败了。以下是代码的关键部分: def retrieve_tokens(self, session, code): # Ge

我已经试着让它工作了一段时间了,我不知道该怎么做。我制作了一个Flask应用程序,现在正在localhost上进行测试。我在localhost:8000上为我的客户机运行一台服务器,在localhost:8080上为Flask应用程序运行另一台服务器,然后使用Flask cors启用跨域请求。一切似乎都很好,应用程序完成了它的工作。然而,当它在
会话中存储值时,它突然失败了。以下是代码的关键部分:

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
debug调用。当调用
retrieve_tokens
时,一切正常;最重要的是,第二个
print
给出与第一个相同的结果(即,一个包含所有请求令牌的JSON对象)。但是
get_令牌
顽固地返回
None
。知道我做错了什么吗?我排除了几件事:

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

我能试试什么?似乎什么都不管用。在本地主机上运行是否有问题?虫子?如果有帮助的话,我正在Ubuntu 16.04上使用Chrome。

问题是您在if语句中赋值。因此,如果没有给出if语句的条件,您将不会分配稍后将使用的值,并且您的代码将因此失败。尝试用if-else语句更改if语句,以确保会话的此字段将具有值。

问题在于您正在if语句中赋值。因此,如果没有给出if语句的条件,您将不会分配稍后将使用的值,并且您的代码将因此失败。尝试用if-else语句更改if语句,以确保会话的此字段具有值。

我想更改标题“如何同步两台服务器?”天哪,我没有想到,可能是在两台单独的服务器上运行该程序造成了问题?我这样做是因为我不知道如何在本地测试它,但在实际用例中,它不会是这样的。无论如何,不要改变这个问题,因为这不是我想做的,但这可能是我出现问题的原因。我想改变标题“如何同步两台服务器?”天哪,我没有想到,也许在两台单独的服务器上运行这个东西会造成问题?我这样做是因为我不知道如何在本地测试它,但在实际用例中,它不会是这样的。无论如何,不要改变问题,因为这不是我想做的,但这可能是我的问题的原因。如文所述,这应该是一个评论。根据SO指南,答案需要包括解决问题所需的确切代码,而不仅仅是提示您应该何时尝试。请编辑以包含您的建议的代码实现。如前所述,这应该是一条注释。根据SO指南,答案需要包括解决问题所需的确切代码,而不仅仅是提示您应该何时尝试。请编辑以包含建议的代码实现。