#python #variables #flask
#python #переменные #flask
Вопрос:
У меня есть код на Python с использованием framework Flask, который проверяет, зарегистрирован ли администратор (logged = True) для отображения страницы администратора, если администратор не зарегистрирован (logged = False), перенаправляя на страницу входа.
@app.route('/admin_login', methods=['POST', 'GET'])
def admin_login():
if request.method == 'POST':
login = request.form['login']
passsword = request.form['password']
if (login == 'admin') and (passsword == 'admin_pass'):
logged = True
return redirect('/admin_page'), logged
else:
return "Wrond login and passsword!"
else:
return render_template('admin_login.html')
@app.route('/admin_page')
def admin_page():
if logged == True:
return render_template('admin_page.html')
else:
return redirect('/admin_login')
Но я получаю сообщение об ошибке в if logged == True:
— NameError: name 'logged' is not defined
. Я пытался сделать logged
глобальный, но это не помогло. Итак, как я могу logged
определить и использовать его в функции admin_page
?
Комментарии:
1. Глобальная переменная на веб-сервере не имеет смысла. Если вы выполнили эту работу, то, если кто -либо вошел в систему как администратор, тогда любой другой может свободно посещать /admin_page !
2. Я знаю это, я просто хочу знать, как использовать возвращенные logged в других функциях
Ответ №1:
Вам следует избегать наличия глобальной logged_in
переменной на сервере. Тогда любому будет разрешено использовать ваш веб-сайт после успешного входа в систему! Вместо этого вы должны использовать переменную сеанса.
Данные сеанса хранятся поверх файлов cookie и зашифрованы. Для этого шифрования приложению Flask требуется определенный SECRET_KEY. Объект сеанса также является объектом словаря, содержащим пары ключ-значение.
Добавьте это в начало вашего основного скрипта, если вы его еще не получили:
from flask import Flask, session, redirect, url_for, escape, request, flash
app = Flask(__name__)
app.secret_key = 'any random string’
Затем измените свою функцию admin_login()
, чтобы установить переменную сеанса:
@app.route('/admin_login', methods=['POST', 'GET'])
def admin_login():
if request.method == 'POST':
login = request.form['login']
passsword = request.form['password']
if not 'logged_in' in session:
if (login == 'admin') and (passsword == 'admin_pass'):
session['logged_in'] = True
return redirect(url_for("admin_page"))
else:
flash("Wrong login and passsword!")
return render_template('admin_login.html')
else:
return redirect(url_for("admin_page"))
else:
if "logged_in" in session:
return redirect(url_for("admin_page"))
return render_template("admin_login.html")
Затем измените свою admin_page()
функцию, чтобы проверить эту переменную сеанса:
@app.route('/admin_page')
def admin_page():
if 'logged_in' in session:
return render_template('admin_page.html')
else:
return redirect(url_for('admin_login'))
Вам также потребуется конечная точка выхода из системы, чтобы вывести переменную сеанса:
@app.route('/logout')
def logout():
session.pop('logged_in', None)
return redirect(url_for('index'))