您的位置:

flask报错RuntimeError("Session transactions only make sense with cookies enabled.")怎么办

  发布时间:2023-01-29 06:30:02
报错的原因这个错误可能是由于你正在使用 Flask 的会话机制,但是没有启用 cookie 支持。在使用会话机制之前,你需要先设置一个秘钥来保护 cookie 的安全性。如何解决解决方法如下:在使用会话机制之前,确保在 Flask 应用程序实例上设置了秘钥,如上面的代码片段所示。一个常用的模拟客户端请求的工具是 requests-toolbelt 库。如果你确定已经设置好了秘钥,并且并不想使用会话机制又不能使用session, 可以尝试将session所在的部分注释掉。

报错的原因

这个错误可能是由于你正在使用 Flask 的会话机制,但是没有启用 cookie 支持。在使用会话机制之前,你需要先设置一个秘钥来保护 cookie 的安全性。

下面是一个例子:


from flask import Flask, session

app = Flask(__name__)
app.secret_key = 'your_secret_key'

还有一种情况是,当你在使用 Flask 的测试客户端时,由于其自身不支持 cookie ,因此会触发这个错误。在这种情况下,你可以使用工具来模拟客户端请求来避免这个错误。

如何解决

解决方法如下:

1. 在使用会话机制之前,确保在 Flask 应用程序实例上设置了秘钥,如上面的代码片段所示。

2. 如果你正在使用 Flask 的测试客户端进行测试,可以使用工具来模拟客户端请求,避免出现此错误。一个常用的模拟客户端请求的工具是 requests-toolbelt 库。

3. 如果你确定已经设置好了秘钥,并且并不想使用会话机制又不能使用session, 可以尝试将session所在的部分注释掉。

使用例子

使用 requests-toolbelt 库模拟客户端请求的示例代码如下:


from flask import Flask
from requests_toolbelt.sessions import BaseUrlSession

app = Flask(__name__)

@app.route('/')
def index():
    return 'Hello, World!'

def test_index():
    with app.test_client() as client:
        session = BaseUrlSession(base_url='http://localhost:5000')
        response = session.get('/')
        assert response.status_code == 200
        assert b'Hello, World!' in response.content

上述代码中,我们使用了 `BaseUrlSession` 类来模拟客户端请求。它和标准库中的 `Session` 类类似,只是它需要一个额外的 `base_url` 参数来指定服务器的基地址。在这里,我们指定了服务器地址为 `http://localhost:5000`。

另一个例子,如果你不需要使用会话机制,可以将会话机制相关的代码注释掉。比如下面的代码:


from flask import Flask

app = Flask(__name__)
# app.secret_key = 'your_secret_key'

@app.route('/')
def index():
    # session['username'] = 'test'
    return 'Hello, World!'

在这种情况下,你可以在上面代码中注释掉,`app.secret_key = 'your_secret_key'` 和 `session['username'] = 'test'`。