Получение "KeyError: 'example'" при чтении значений сеанса по другому маршруту - PullRequest
0 голосов
/ 11 октября 2019

У меня проблема, потому что я хочу включить значения в сеанс. Когда я сохраняю значения в одном app.route и позже мне нужно перейти на другую ссылку и использовать это значение, он отображает KeyError. Что я делаю не так?

from flask import Flask, render_template, request, session
from OPTYMALIZACJA import OPTYMALIZACJA

app = Flask(__name__)  
app.secret_key = "abc" 
app.config['SESSION_TYPE'] = 'memcached' 

@app.route('/',methods = ['POST', 'GET'])
def first():
    #calculation instructions
    session['example'] = 'example1'
    return render_template('index.html')

@app.route('/export')
def second():
    s = session['example']
    print(s)
    return render_template('index.html')

В index.html у меня есть ссылка на страницу localhost / export.

Ответы [ 2 ]

0 голосов
/ 12 октября 2019

Код, который вы разместили, работает как положено.

Вот несколько вещей, которые вы можете проверить:

  1. Убедитесь, что ключ, который вы использовали для сохранения в sessionв first указан точный тот же ключ, который вы использовали для получения от session в second. Я знаю, что ваш пример кода уже показывает тот же ключ example, но ваш фактический код может не использовать тот же ключ, или он был каким-то образом удален из session.

    Вы можете проверить содержимое session, напечатав session.items() (например, dict):

    print(session.items())
    print(session['example'])
    
    # 127.0.0.1 - - [12/Oct/2019 16:03:52] "GET /export HTTP/1.1" 200 -
    # dict_items([('example', 'example1')])
    # example1
    
  2. Убедитесь, что вы получаете правильныймаршрут (first), который обновляет session. Например, когда я тестировал ваш пример кода, я случайно обновлял / export вместо доступа к правильному маршруту в / .

0 голосов
/ 11 октября 2019

Ваш код работает для меня, обычно хорошей практикой является использование get для предотвращения подобных KeyErrors, поэтому вместо s = session['example'] do s = session.get('example', 'default value')


from flask import Flask, session

app = Flask(__name__)  
app.secret_key = "abc" 
app.config['SESSION_TYPE'] = 'memcached' 

@app.route('/',methods = ['POST', 'GET'])
def first():
    #calculation instructions
    session['example'] = 'example1'
    return session['example']

@app.route('/export')
def second():
    s = session.get('example', 'YourDefaultValueHere')
    print(s)
    return session['example']

if __name__ == '__main__':
    app.run()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...