Flask会话正在从一个视图向另一个视图丢失数据

2024-09-27 09:28:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个非常简单的flask web应用程序,以便来自我工作的地方的测试人员可以测试我的深度学习模型,而无需下载项目。 它有一个接收pdf文件和表单中的字符串的视图(深度学习模型的输入)和另一个显示另一个字符串的视图(深度学习模型的输出)。 我试图使用flask.session对象从第一个视图中选取数据并将其传递给第二个视图,然后将其存储在flask.g对象中,以便在Jinja模板中显示它。 我的问题是flask.session对象将数据从一个视图丢失到另一个视图。如何避免? 我不太担心安全问题,因为只有我工作的测试员才能访问这个web应用程序。 抱歉,如果这个问题很愚蠢的话,我是个十足的新手。你知道吗

我知道可能有最好的方法可以做到这一点,但我想保持它尽可能简单,因为我这样做只是为了测试深入学习模型容易。你知道吗

from flask import (
    Blueprint, flash, g, redirect, render_template, request, session, url_for
)

bp = Blueprint('book', __name__, url_prefix='/book')

@bp.route('/initialpage', methods=('GET', 'POST'))
def initialpage():
    if request.method == 'POST':
        book_file = request.form['book']
        parsed = parser.from_file(book_file)
        book = parsed["content"]

        question = request.form['question']
        error = None

        if not book:
            error = 'Book is required.'
        elif not question:
            error = 'Question is required.'

        if error is None:
            session.clear()
            session['book'] = book
            session['question'] = question
            print(session['question'])
            return redirect(url_for('book.finalpage'))

        flash(error)

    return render_template('book/initialpage.html')


@bp.route('/finalpage')
def finalpage():
    book_body = session.get('book')
    book_question = session.get('question')

    if book_body is None:
        g.book = None
    elif book_question is None:
        g.question = None
    else:
        g.book = book_body
        g.question = book_question

    return render_template('book/finalpage.html')

存储在session['book']session['question']中的数据在从'/initialpage'传递到'/finalpage'时丢失。你知道吗


Tags: 数据对象模型none视图flaskifis
1条回答
网友
1楼 · 发布于 2024-09-27 09:28:32

我终于解决了这个问题! 在我的情况下,我认为问题是我的数据太大,无法通过烧瓶会话. 我发现大多数浏览器都不支持大于~4000字节的会话cookie,我的数据大约为~10 MB。 所以我的想法是创建一个数据库来存储数据,并通过烧瓶会话. 作为数据库,我使用pythonsqlite3。 连接到数据库和初始化数据库的函数被编码在一个单独的文件中。 代码如下:

from flask import (
    Blueprint, flash, g, redirect, render_template, request, session, url_for
)

from flaskr.db import get_db

bp = Blueprint('book', __name__, url_prefix='/book')

@bp.route('/initialpage', methods=('GET', 'POST'))
def initialpage():
    if request.method == 'POST':
        book_file = request.form['book']
        parsed = parser.from_file(book_file)
        book = parsed["content"]
        question = request.form['question']
        db = get_db()
        error = None

        if not book:
            error = 'Book is required.'
        elif not question:
            error = 'Question is required.'

        if error is None:
            if db.execute('SELECT book, question FROM bq').fetchone() is None:
                db.execute('INSERT INTO bq (book, question) VALUES (?, ?)',(book, question))
                db.commit()

            bq = db.execute('SELECT * FROM bq WHERE (book, question) = (?, ?)',(book, question)).fetchone()
            session.clear()
            session['bq_id'] = bq['id']
            print(bq['id'])
            return redirect(url_for('book.finalpage'))

        flash(error)

    return render_template('book/initialpage.html')


@bp.route('/finalpage')
def finalpage():
    bq_id = session.get('bq_id')
    print(bq_id)

    if bq_id is None:
        g.bq = None
    else:
        g.bq = get_db().execute('SELECT * FROM bq WHERE id = ?', (bq_id,)).fetchone()

    return render_template('book/finalpage.html')```

相关问题 更多 >

    热门问题