【发布时间】:2020-08-23 23:33:24
【问题描述】:
我在我的 app.py 中配置了会话,如下所示。
#Import framework classes
from flask import Flask, request, session
import json
from datetime import timedelta
from flask_pymongo import PyMongo
from flask_mongo_sessions import MongoDBSessionInterface
#Import custom classes
import sys
sys.path.insert(1, './models')
from StudentModel import*
#App initiate, set app configurations and session configurations
app = Flask(__name__, static_url_path='')
app.config["MONGO_URI"] = "mongodb://localhost:27017/ChatBot"
app.config['SESSION_PERMANENT'] = False
mongo = PyMongo(app)
with app.app_context():
app.session_interface = MongoDBSessionInterface(app, mongo.db, 'sessions')
#Initialize Helper Classes
StudentModelContract = StudentModel(mongo)
@app.route('/getSession')
def getMessage():
return session['key']
@app.route('/setSession')
def setMessage():
return session['key'] = 'value'
现在当我调用 getSession 方法时,出现以下错误。
Traceback(最近一次调用最后一次):文件 “/home/thathsara/Documents/PythonProject/venv/lib/python3.5/site-packages/flask/app.py”, 第 2446 行,在 wsgi_app 中 ctx.push() 文件“/home/thathsara/Documents/PythonProject/venv/lib/python3.5/site-packages/flask/ctx.py”, 第 390 行,正在推送中 self.session = session_interface.open_session(self.app, self.request) 文件 "/home/thathsara/Documents/PythonProject/venv/lib/python3.5/site-packages/flask_mongo_sessions/init.py", 第 57 行,在 open_session 中 session = self.session_class(initial=doc['d'], sid=sid) 文件 "/home/thathsara/Documents/PythonProject/venv/lib/python3.5/site-packages/flask_mongo_sessions/init强>.py", 第 18 行,在 init 中 initial = pickle.loads(str(initial)) TypeError:需要一个类似字节的对象,而不是'str' [2020-05-08 17:27:36,960] 应用程序中的错误: 处理错误时请求终结失败并出现错误 Traceback(最近一次通话最后一次):文件 “/home/thathsara/Documents/PythonProject/venv/lib/python3.5/site-packages/flask/app.py”, 第 2446 行,在 wsgi_app 中 ctx.push() 文件“/home/thathsara/Documents/PythonProject/venv/lib/python3.5/site-packages/flask/ctx.py”, 第 390 行,正在推送中 self.session = session_interface.open_session(self.app, self.request) 文件 "/home/thathsara/Documents/PythonProject/venv/lib/python3.5/site-packages/flask_mongo_sessions/init.py", 第 57 行,在 open_session 中 session = self.session_class(initial=doc['d'], sid=sid) 文件 "/home/thathsara/Documents/PythonProject/venv/lib/python3.5/site-packages/flask_mongo_sessions/init强>.py", 第 18 行,在 init 中 initial = pickle.loads(str(initial)) TypeError: a bytes-like object is required, not 'str'
在处理上述异常的过程中,又发生了一个异常:
Traceback(最近一次调用最后一次):文件 “/home/thathsara/Documents/PythonProject/venv/lib/python3.5/site-packages/flask/app.py”, 第 1970 行,在 finalize_request 中 response = self.process_response(response) 文件“/home/thathsara/Documents/PythonProject/venv/lib/python3.5/site-packages/flask/app.py”, 第 2269 行,在 process_response self.session_interface.save_session(self, ctx.session, response) 文件 "/home/thathsara/Documents/PythonProject/venv/lib/python3.5/site-packages/flask_mongo_sessions/init.py", 第 68 行,在 save_session 中 cookie_exp = self.get_expiration_time(app, session) 文件“/home/thathsara/Documents/PythonProject/venv/lib/python3.5/site-packages/flask/sessions.py”, 第 268 行,在 get_expiration_time if session.permanent: AttributeError: 'NoneType' object has no attribute 'permanent'
第一次没有任何会话时应用程序正常运行,一旦我设置了会话,它将在数据库中创建,并且会话 ID 会毫无问题地发送到浏览器(cookie)。但在那之后,即使我调用另一条路线(甚至/),我也得到了错误。 有人可以解释我的代码有什么问题吗?
【问题讨论】:
-
我尝试运行您提供的代码。您没有收到
return session['key'] = 'value'行的错误吗?
标签: python flask flask-session