会话中的列表始终显示为空-烧瓶

时间:2020-07-15 21:44:54

标签: python-3.x flask

好,让我说我有一个“购物清单”

我需要这个购物清单对于访问烧瓶应用程序的每个人来说都是唯一的。

所以我打算将列表存储在会话中。

所以我计划使用@ app.before_first_request

设置列表会话['list'] = []

但是,每当我追加到会话列表时,最终都会得到一个空列表。 为什么?我这样添加: http://127.0.0.1:5000/?add=4

我想在索引路由上看到所有列表项的字符串,并且如果有“添加”查询,能够将新项追加到列表中。

但是,这段代码只是将一件事添加到列表中,然后又返回为空。

from flask import Flask, jsonify, request, url_for, redirect, session, render_template

app = Flask(__name__)
app.config['SECRET_KEY'] = 'Thisisasecret!'



@app.before_first_request
def init_app():

   session['list'] = []
    
   return



@app.route('/', methods=['POST', 'GET'])
def index():

    add = request.args.get("add")
    
    if add:
        session['list'].append(add)
        
    return str(session['list'])
    

1 个答案:

答案 0 :(得分:0)

不确定append的{​​{1}}方法为什么会那样。我看到对session['list']的多次点击最终仍在修改第二个列表项,而不是第三个,如此反复。

使用变量/?add=randomValue临时存储完整列表,然后将其写回到l,似乎可以实现您希望的行为:

session['list']

也:也许不是为应用程序实例运行一次的@app.route('/', methods=['POST', 'GET']) def index(): add = request.args.get("add") l = session['list'] if add: l.append(add) session['list'] = l return str(l) (因此,当第二个用户连接到其他浏览器时,该代码将不会再次运行)您可能希望before_first_request具有某种逻辑,以查看before_request中是否存在list键:

session

尽管这可能会回答您的问题,但我不确定这是否是2020年实施购物车系统的最佳方法,除非这当然只是出于学习原因! :-)