次のように 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 メソッドを呼び出すと、次のエラーが発生します。
トレースバック (最新の呼び出しが最後): ファイル "/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 セッション内 = 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' [2020-05-08 17:27:36,960] アプリのエラー: リクエストのファイナライズがエラーで失敗しましたエラー トレースバック (最新の呼び出しが最後): ファイル "/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) File "/home/thathsara/Documents/PythonProject/venv/lib/python3.5/site-packages /flask_mongo_sessions/ init .py", line 18, in init initial = pickle.loads(str(initial)) TypeError: 'str' ではなく、バイトのようなオブジェクトが必要です
上記の例外の処理中に、別の例外が発生しました:
トレースバック (最後の最後の呼び出し): ファイル "/home/thathsara/Documents/PythonProject/venv/lib/python3.5/site-packages/flask/app.py"、1970 行目、finalize_request 応答 = 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 の場合、session.permanent: AttributeError: 'NoneType'オブジェクトには「永続的」属性がありません
初めてセッションなしでアプリケーションが適切に実行され、セッションを設定すると、セッションが DB に作成され、セッション ID が問題なくブラウザーに送信されます (Cookie)。しかし、その後、別のルート(/でも)を呼び出してもエラーが発生します。誰かが私のコードの問題を説明できますか?