Javascript 存储在会话中,从会话中获取 python/flask

Javascript store in session, get from session in python/flask

我正在使用一个烧瓶应用程序,我正在尝试使用 javascript 存储一个 Json 对象,并在 python 中检索它,因为我想存储一种用户正在生成的“购物清单”信息进入我的数据库。该对象出现在我的浏览器会话存储中

但似乎我的语法不正确,因为我收到“KeyError:'routine'”

 @app.route("/workoutroutines", methods=["GET", "POST"])
def showWorkoutRoutines():
    """Show all workout routines, allow user to create new routine"""
    
    if session['routine'] is not None: // <---error here
       try: 
        obj = json.loads(session['routine'])
        print(obj.name) 
     
       except: 
           print("something went wrong")
        



    all_routines = WorkoutRoutines.query.all()
    createRoutineButton = url_for("createARoutine")
    return render_template("allRoutines.html", all_routines=all_routines, createRoutineButton=createRoutineButton)

错误日志:

Traceback (most recent call last):
  File "C:\Users\user\Desktop\Springboard\workoutApp\venv\Lib\site-packages\flask\app.py", line 2088, in __call__
    return self.wsgi_app(environ, start_response)
  File "C:\Users\user\Desktop\Springboard\workoutApp\venv\Lib\site-packages\flask\app.py", line 2073, in wsgi_app
    response = self.handle_exception(e)
  File "C:\Users\user\Desktop\Springboard\workoutApp\venv\Lib\site-packages\flask\app.py", line 2070, in wsgi_app
    response = self.full_dispatch_request()
  File "C:\Users\user\Desktop\Springboard\workoutApp\venv\Lib\site-packages\flask\app.py", line 1515, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "C:\Users\user\Desktop\Springboard\workoutApp\venv\Lib\site-packages\flask\app.py", line 1513, in full_dispatch_request
    rv = self.dispatch_request()
  File "C:\Users\user\Desktop\Springboard\workoutApp\venv\Lib\site-packages\flask\app.py", line 1499, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args)
  File "C:\Users\user\Desktop\Springboard\workoutApp\app.py", line 171, in showWorkoutRoutines
    if session['routine'] is not None:
  File "C:\Users\user\Desktop\Springboard\workoutApp\venv\Lib\site-packages\flask\sessions.py", line 79, in __getitem__
    return super().__getitem__(key)
KeyError: 'routine'

你遇到一个关键错误,因为当你写

session['routine']

您的代码正在尝试访问会话对象中的键 'routine',但它不存在,因此会引发键错误。

您可以修改为:

if 'routine' in session:
    obj = json.loads(session['routine'])
    print(obj) 
else:
    print('your error message')

在 flask 中,您还可以通过以下操作查看会话对象中的键:

app.logger.info('Session keys: {}'.format(session.keys()))

我认为默认情况下 Flask 不会在信息级别记录内容,因此要使其正常工作,您需要在启动应用程序时将日志记录设置为信息级别。如果这太麻烦,只需将 'app.logger.info' 替换为 print.