|
import streamlit as st |
|
import time |
|
|
|
|
|
users_db = { |
|
'1': {'password': '1', 'name': '1', 'age': 1, 'favorite_color': 'blue'} |
|
} |
|
|
|
def register_user(username, password, name, age): |
|
"""Register a new user.""" |
|
global users_db |
|
if username in users_db: |
|
return False |
|
|
|
return True |
|
|
|
def login_user(username, password): |
|
"""Authenticate a user.""" |
|
if username in users_db and users_db[username]['password'] == password: |
|
st.session_state['logged_in'] = True |
|
st.session_state['user'] = users_db[username] |
|
print('login success') |
|
return True |
|
print('login faild') |
|
print(users_db) |
|
st.session_state['logged_in'] = 'login' |
|
return False |
|
|
|
def logout_user(): |
|
"""Log out the current user.""" |
|
st.session_state['logged_in'] = 'login' |
|
st.session_state.pop('user', None) |
|
st.session_state.pop('step1_done', None) |
|
st.session_state.pop('step2_done', None) |
|
|
|
|
|
def show_registration(): |
|
"""Display the registration form.""" |
|
st.header("Register") |
|
reg_username = st.text_input("Username", key="reg_user") |
|
reg_password = st.text_input("Password", type="password", key="reg_pass") |
|
reg_name = st.text_input("Name", key="reg_name") |
|
reg_age = st.number_input("Age", min_value=0, max_value=120, step=1, key="reg_age") |
|
if st.button("Register"): |
|
if register_user(reg_username, reg_password, reg_name, reg_age): |
|
st.success("Registration successful. Please log in.") |
|
else: |
|
st.error("Username already exists. Please choose another one.") |
|
|
|
def show_login(): |
|
"""Display the login form.""" |
|
st.header("Login") |
|
username = st.text_input("Username", key="login_user") |
|
password = st.text_input("Password", type="password", key="login_pass") |
|
if st.button("Login"): |
|
if login_user(username, password): |
|
st.success(f"Welcome back, {st.session_state['user']['name']}!") |
|
|
|
else: |
|
st.error("Invalid username or password.") |
|
|
|
def show_task(): |
|
|
|
st.title("Task") |
|
|
|
|
|
if 'step1' not in st.session_state: |
|
st.session_state['step1'] = None |
|
if 'step2' not in st.session_state: |
|
st.session_state['step2'] = None |
|
if 'step3' not in st.session_state: |
|
st.session_state['step3'] = None |
|
if 'step4' not in st.session_state: |
|
st.session_state['step4'] = None |
|
|
|
st.header('step 1: 文案准备') |
|
st.text_input("请输入文案关键词", key="step1_text") |
|
st.checkbox("风格", key="step1_voice") |
|
if st.button("开始生成文案"): |
|
st.session_state['step1'] = 'done' |
|
|
|
if st.session_state['step1'] == 'done': |
|
st.header('step 2: 语音风格') |
|
st.text_input("语音风格关键词", key="step2_text") |
|
if st.button("开始生成语音"): |
|
st.session_state['step2'] = 'done' |
|
|
|
if st.session_state['step2'] == 'done': |
|
st.header('step 3: 素材风格') |
|
st.text_input("请输入素材风格关键词", key="step3_text") |
|
if st.button("开始载入素材"): |
|
st.session_state['step3'] = 'done' |
|
|
|
if st.session_state['step3'] == 'done': |
|
st.header('step 4: 视频风格') |
|
st.text_input("请输入视频风格关键词", key="step4_text") |
|
if st.button("开始合并视频"): |
|
st.session_state['step4'] = 'done' |
|
|
|
if st.session_state['step4'] == 'done': |
|
progress_bar = st.progress(0) |
|
|
|
|
|
for i in range(100): |
|
progress_bar.progress(i + 1) |
|
time.sleep(0.05) |
|
|
|
|
|
|
|
if st.button("Logout"): |
|
logout_user() |
|
|
|
def main(): |
|
"""Main function to control the app flow.""" |
|
st.title("Streamlit Application with Login and Multi-step Task") |
|
|
|
if 'logged_in' not in st.session_state: |
|
st.session_state['logged_in'] = 'login' |
|
|
|
if st.session_state['logged_in'] == 'login': |
|
show_login() |
|
elif st.session_state['logged_in'] == 'register': |
|
show_registration() |
|
elif st.session_state['logged_in'] == True: |
|
show_task() |
|
|
|
if __name__ == "__main__": |
|
main() |
|
|