Проблема с виджетом входа в стримлит ⇐ Python

Программы на Python
Anonymous
Проблема с виджетом входа в стримлит

Сообщение Anonymous »

Я пытаюсь создать систему входа в приложение Stramlit, но у меня есть некоторые проблемы с логикой. У меня есть файл Python, в котором находится логика входа в систему, и еще один файл, в котором находится логика системы. Чтобы быть более конкретным, я хочу перейти с экрана входа в систему на панель управления при нажатии кнопки «Вход» и с панели управления обратно в систему при нажатии кнопки «Выход»
Я пытался отделить authedicator.logout() от функцию login() первого файла Python и вызовите ее в другом файле внутри блока st.session_state['page'] = 'dashboard'. Также пробовал некоторые другие вещи, такие как вызов run_app() внутри блока st.session_state['page'] = 'dashbpard', но мне не удалось этого добиться. Я хочу, чтобы когда я нажимал «Выйти», чтобы выйти из блока st.session_state['page'] = 'dashboard' и перенаправиться на блок st.session_state['page'] = 'login'.
Первый файл Python с логином:

Код: Выделить всё

import streamlit as st
import mysql.connector
from mysql.connector import Error
import streamlit_authenticator as stauth
from Streamlit_app import run_app

### def create_connetion() and def fetch_credentials() first ###

def login():
conn = create_connection()
credentials = format_credentials(fetch_credentials(conn))

if credentials:
authenticator = stauth.Authenticate(
credentials=credentials,
cookie_name="auth",
cookie_key="my_key",
cookie_expiry_days=3,
)

name, auth_status, username = authenticator.login()

if auth_status is None:
st.warning("Please enter your credentials")
return auth_status

if auth_status is False:
st.error("Username or Password is incorrect")
return auth_status

if auth_status:
user_info = credentials['usernames'][username]
first_name = user_info["name"]
last_name = user_info["last_name"]
date_of_birth = user_info["date_of_birth"]

st.sidebar.subheader(f'Welcome {first_name} {last_name}!')

chat_dir = "your_chat_dir"
run_app(chat_dir)

authenticator.logout('Log Out', 'sidebar')
return auth_status
else:
st.error("No users found in the database")

conn.close()

#st.title('Login System')

#login()
Второй файл Python со страницами:

Код: Выделить всё

import streamlit as st
from Streamlit_signup import sign_up
from Streamlit_login import login

if 'page' not in st.session_state:
st.session_state['page'] = 'login'

if 'auth_status' not in st.session_state:
st.session_state['auth_status'] = None

if st.session_state['page'] == 'login':
st.title('AI Chatbot')

col_1, col_2 = st.columns([14, 2])
with col_2:
if st.button(":green[Sign up]"):
st.session_state['page'] = 'sign_up'
st.rerun()

auth_status = login()
st.write("auth status: " + str(auth_status))

if auth_status:
st.write("auth status in dashboard: " + str(auth_status))
st.session_state['page'] = 'dashboard'
st.session_state['auth_status'] = auth_status
st.rerun()

elif st.session_state['page'] == 'sign_up':
st.title("Sign Up Form")
sign_up()

if st.button("Back to Login"):
st.session_state['page'] = 'login'
st.session_state['auth_status'] = False
st.rerun()

elif st.session_state['page'] == 'dashboard':
st.title("Dashboard")
st.write(st.session_state['auth_status'])
login()
st.session_state['page'] = 'login'

Несколько изображений в помощь:

[*]Страница входа

Панель управления

Остается на панели управления после выхода из системы



Подробнее здесь: https://stackoverflow.com/questions/790 ... -streamlit

Вернуться в «Python»