Компилятор выдаёт ошибку на обьявление session['userLogged'] во Flask

пишу пет-проект на flask, пытаюсь сделать примитивную регистрацию, но сайт выдаёт ошибку на обьявление session['userLogged'] Мой код:

from flask import Flask, render_template, url_for, request, flash, get_flashed_messages, redirect, session
from sqlite3 import *




app=Flask(__name__)

app.secret_key='key123456789'

urls=[
    {"name":"Добавить запись", "url":"/add"},
    {"name":"динамический просмотр", "url":"/view/<int:id>"}
]

session['userLogged'] = False


@app.route('/login',  methods=['POST', 'GET'])
def login():
    if request.method=='POST':
        if len(request.form['username'])>3 and len(request.form['password'])>5:
            username=request.form['username']
            passw=request.form['password']
            db = connect('database.db')
            cur = db.cursor()
            cur.execute("SELECT * FROM user")
            db.commit()
            users = cur.fetchall()
            db.close()
            name_in_db=False
            for i in users:
                if i[1]==username and i[2]==passw:
                    session['userLogged']=True

        else:
            flash('юзернейм должен быть длиннее 3 символов, а пароль - длиннее 5!')


    return render_template('log.html')


@app.route("/")
def index():
    db = connect('database.db')
    cur = db.cursor()
    cur.execute("SELECT * FROM article")
    db.commit()
    articles = cur.fetchall()
    db.close()
    
    if session['userLogged']!=True:
        return redirect('/login')
    return render_template('index.html', title="news", urls=urls, articles=articles)

@app.route("/add", methods=['POST', 'GET'])
def add():
    logged = session.get('userLogged')
    if session['userLogged'] != True:
        return redirect('/login')
    if request.method=='POST':

        if len(request.form['header']) > 3 and len(request.form['text'])>10:


            db = connect('database.db')
            cur = db.cursor()
            cur.execute(f"INSERT INTO article (name, text) VALUES ('{request.form['header']}', '{request.form['text']}');")
            db.commit()
            db.close()

            flash(f"все ок, статья {request.form['header']} добавлена")
        else:
            flash('ошибка, некорректные данные')


    return render_template('add.html')


@app.route("/view/<int:id>")
def detailview(id):
    logged = session.get('userLogged')
    if session['userLogged'] != True:
        return redirect('/login')
    db = connect('database.db')
    cur = db.cursor()
    cur.execute(f"SELECT * FROM article WHERE id={id};")
    db.commit()
    article = cur.fetchone()
    db.close()
    return render_template('detailview.html', article=article)

@app.route("/delete/<int:id>")
def delete(id):
    logged = session.get('userLogged')
    if session['userLogged'] != True:
        return redirect('/login')
    db = connect('database.db')
    cur = db.cursor()
    cur.execute(f"DELETE FROM article WHERE id={id};")
    db.commit()
    db.close()
    return redirect("/")

@app.route("/update/<int:id>", methods=['POST', 'GET'])
def update(id):
    logged = session.get('userLogged')
    if session['userLogged'] != True:
        return redirect('/login')
    db = connect('database.db')
    cur = db.cursor()
    cur.execute(f"SELECT * FROM article WHERE id={id};")
    db.commit()
    article = cur.fetchone()
    db.close()
    if request.method == 'POST':

        if len(request.form['header']) > 3 and len(request.form['text']) > 10:

            db = connect('database.db')
            cur = db.cursor()
            cur.execute(f"UPDATE article SET name='{request.form['header']}', text='{request.form['text']}' WHERE id={id};")
            db.commit()
            db.close()

            flash(f"все ок, статья '{request.form['header']}' обновлена")
        else:
            flash('ошибка, некорректные данные')

    return render_template('update.html', article=article)




@app.errorhandler(404)
def pagenotfound(error):
    return render_template('error.html')


db = connect('database.db')
cur = db.cursor()
cur.execute("SELECT * FROM user")
db.commit()
users = cur.fetchall()
db.close()


for i in users:
    print(i[0], i[1], i[2])

# with app.test_request_context():
#     print(url_for("page", user="i"))




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

Ошибка:

Traceback (most recent call last):
  File "C:\projects\firstflask20-03-2024\projectflask\main.py", line 16, in <module>
    session['userLogged'] = False
    ~~~~~~~^^^^^^^^^^^^^^
  File "C:\projects\firstflask20-03-2024\projectflask\.venv\Lib\site-packages\werkzeug\local.py", line 311, in __get__
    obj = instance._get_current_object()
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\projects\firstflask20-03-2024\projectflask\.venv\Lib\site-packages\werkzeug\local.py", line 508, in _get_current_object
    raise RuntimeError(unbound_message) from None
RuntimeError: Working outside of request context.

Я также пробовал во вью-функциях проверять session.get('userLogged') is None но там какая-то неизвестная ошибка была и ломалась программа, не менялось session['userLogged'] и меня отовсюду кидало на регистрацию


Ответы (0 шт):