Выход из сеанса при нажатии на ссылки в навигационной панели для определенных HTML-страниц в приложении Python-Flask
У меня есть вопрос о перенаправлениях в моем приложении Python-Flask, который можно найти здесь: http://jordanirvine.pythonanywhere.com/ Я постоянно развиваюсь с этим приложением как с новым разработчиком, но недавно у меня возникли проблемы с некоторыми аспектами. Если вы войдете в приложение, используя "имя пользователя" и "пароль" для имени пользователя и пароля, а затем нажмете кнопку "добавить участника", вы увидите, что все работает нормально, и вы можете легко добавить участника, однако, Если вы находитесь на веб-странице "Добавить участника" и решили вернуться на верхнюю страницу "Поиск участников" или "Домашняя страница", не нажимая кнопку "Отправить", вы выйдете из текущего сеанса. Может кто-нибудь помочь мне понять, почему это так? Я хотел бы, чтобы пользователь вошел в систему во время этих переходов, поскольку это, вероятно, часто случается. Ниже приведен некоторый исходный код:
Вот главная ссылка:
@app.route('/home/<defSess>')
@app.route('/home/', defaults={'defSess': None})
def home(defSess):
if defSess is None:
session.clear()
return render_template('home.html')
else:
defSess = defSess
with sql.connect(databases) as connection:
connection.execute("CREATE TABLE IF NOT EXISTS dataBaseNames(name varchar(30) DEFAULT NULL)")
return render_template('home.html', defSess=defSess)
Вот ссылка MemberSearch:
#memberSearch (Dashboard)
@app.route('/memberSearch/', defaults={'defSess': None})
@app.route('/memberSearch/<defSess>')
@is_logged_in
def memberSearch(defSess):
if defSess is None:
session.clear()
flash('Unauthorized, Please login', 'danger')
return render_template('login.html')
else:
defSess = defSess
createTables(defSess)
with sql.connect(defSess) as connection:
connection.row_factory = sql.Row
cur = connection.execute("SELECT * from members m join visits v
where v.breakfastDate = (select max(visits.breakfastDate) from visits
where visits.clientId = m.clientId) UNION select * from members m left
join visits v on m.clientId = v.clientId where breakfastDate is NULL")
members = build_dict_list(cur)
if members:
return render_template('memberSearch.html', members=members, defSess=defSess)
else:
msg = 'No members Found'
return render_template('memberSearch.html', msg=msg, defSess=defSess)
А вот код add_member:
# Add member
@app.route('/add_member/<defSess>', methods=['GET', 'POST'])
def add_member(defSess):
form = MemberForm(request.form)
if request.method == 'POST' and form.validate():
with sql.connect(defSess) as connection:
name = form.name.data
author = defSess
connection.execute("INSERT INTO members(name, author)
VALUES(?,?)",[name,author],)
flash('Member Created', 'success')
return redirect(url_for('memberSearch', defSess=defSess))
return render_template('add_member.html', form=form)
Некоторые другие функции и код:
Код выхода из системы:
@app.route('/logout/')
@is_logged_in
def logout():
session.clear
flash('You are now logged out', 'success')
session['logged_in'] = False
return redirect(url_for('login'))
Проверьте, вошел ли пользователь в систему:
def is_logged_in(f):
@wraps(f)
def wrap(*args, **kwargs):
if 'logged_in' in session:
return f(*args, **kwargs)
else:
flash('Unauthorized, Please login', 'danger')
return redirect(url_for('login'))
return wrap
Если вам нужно больше кода, включая HTML-код, пожалуйста, дайте мне знать, в противном случае любая помощь будет высоко ценится! Кроме того, я понимаю, что, возможно, был более эффективный способ написать это приложение, но я неопытный, и это моя первая попытка создать приложение. В любом случае, спасибо заранее!