Флэш-сообщение фляги, причина Сессия недоступна - PullRequest
0 голосов
/ 18 февраля 2019

Используйте точный код из официальных документов:

@app.route('/', methods=['GET', 'POST'])
def upload_file():
    if request.method == 'POST':
        ...
        if file.filename == '':
            flash('No selected file')
            return redirect(request.url)
        if file and allowed_file(file.filename):
            ..
            flash('File was successfully uploaded')
            return redirect(url_for('uploaded_file', filename=filename))
    return render_template('home.html')

Без flash() все работает нормально.Но при добавлении это вызывает ошибку. Сессия недоступна, потому что не секрет.Ниже приведен след:

> 127.0.0.1 - - [18/Feb/2019 10:16:21] "POST / HTTP/1.1" 500 -
> 127.0.0.1 - - [18/Feb/2019 10:17:16] "GET / HTTP/1.1" 200 - [2019-02-18 10:17:23,999] ERROR in app: Exception on / [POST]
> Traceback (most recent call last):   File
> "/home/dvperv/PycharmProjects/astros/venv/lib/python3.6/site-packages/flask/app.py",
> line 2292, in wsgi_app
>     response = self.full_dispatch_request()   File "/home/dvperv/PycharmProjects/astros/venv/lib/python3.6/site-packages/flask/app.py",
> line 1815, in full_dispatch_request
>     rv = self.handle_user_exception(e)   File "/home/dvperv/PycharmProjects/astros/venv/lib/python3.6/site-packages/flask/app.py",
> line 1718, in handle_user_exception
>     reraise(exc_type, exc_value, tb)   File "/home/dvperv/PycharmProjects/astros/venv/lib/python3.6/site-packages/flask/_compat.py",
> line 35, in reraise
>     raise value   File "/home/dvperv/PycharmProjects/astros/venv/lib/python3.6/site-packages/flask/app.py",
> line 1813, in full_dispatch_request
>     rv = self.dispatch_request()   File "/home/dvperv/PycharmProjects/astros/venv/lib/python3.6/site-packages/flask/app.py",
> line 1799, in dispatch_request
>     return self.view_functions[rule.endpoint](**req.view_args)   File "/home/dvperv/PycharmProjects/astros/app.py", line 39, in upload_file
>     flash('No file part')   File "/home/dvperv/PycharmProjects/astros/venv/lib/python3.6/site-packages/flask/helpers.py",
> line 410, in flash
>     session['_flashes'] = flashes   File "/home/dvperv/PycharmProjects/astros/venv/lib/python3.6/site-packages/werkzeug/local.py",
> line 350, in __setitem__
>     self._get_current_object()[key] = value   File "/home/dvperv/PycharmProjects/astros/venv/lib/python3.6/site-packages/flask/sessions.py",
> line 101, in _fail
>     raise RuntimeError('The session is unavailable because no secret ' RuntimeError: The session is unavailable because no secret key was
> set.  Set the secret_key on the application to something unique and
> secret.
> 127.0.0.1 - - [18/Feb/2019 10:17:24] "POST / HTTP/1.1" 500 -

Я прочитал несколько сообщений об этой ошибке, но все они относятся к расширению Flask-Session, Я не использую его .

Я также попытался добавить app.secret_key = 'super secret key' в приложение, без успеха.

Должен ли я использовать Flask Session и выполнить соответствующую настройку, или есть способ просто использовать обычную Flask flash (), которая как-то работаетс сеансами за сценой.

Конфигурация приложения:

app = Flask(__name__)

UPLOAD_FOLDER = ..
ALLOWED_EXTENSIONS = ..

app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024

if __name__ == '__main__':
app.run()

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

Прикрепленная трассировка указывает, что вы не добавили секретный ключ.Возможно, вы добавили секретный ключ позже, но приложение не синхронизировалось с обновленным кодом.

Я поделюсь базовым примером использования простого флэш-сообщения во Flask.

app.py:

from flask import Flask, render_template, flash

app = Flask(__name__)
app.secret_key = 'super secret'

@app.route('/')
def index():
    flash("Flashing a dummy message")
    return render_template("flash_example.html")

@app.route('/another')
def show_page_without_flash():
    return render_template("flash_example.html")

if __name__ == '__main__':
    app.run(debug=True)

flash_example.html:

<!DOCTYPE html>
<html>
    <head><title>Flash example</title></head>
    <body>
        {% with messages = get_flashed_messages() %}
          {% if messages %}
            <ul class=flashes>
            {% for message in messages %}
              <li>{{ message }}</li>
            {% endfor %}
            </ul>
          {% endif %}
        {% endwith %}
        <p>Dummy paragraph</p>
    </body>
</html>

Маршрут с мгновенным сообщением (/):

flash message example

Маршрут без флеш-сообщения (/ другой):

enter image description here

0 голосов
/ 18 февраля 2019

В трассировке стека очень четко указано, что секретный ключ не установлен.Обязательно установите секретный ключ в нужном месте, например, здесь:

app = Flask(__name__)
app.secret_key = 'asrtarstaursdlarsn'

UPLOAD_FOLDER = ..
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...