Example : A standard & complete Dashboard with proper credentials, Login, and multiple .py files in Streamlit Python.
We can implement a standard multi-page Streamlit dashboard using XAMPP MySQL for user authentication in a fully optimized and modular structure is/are -

streamlit_dashboard_project_structure/
│
├── login or app.py                 <-- Login launcher
├── pages/
│   ├── dashboard.py       <-- Main dashboard
│   ├── page1.py           <-- Extra pages/forms
│   └── page2.py
│
├── utils/
│   └── auth.py            <-- Login check logic
│
├── requirements.txt

Step 1: create and Setup MySQL in XAMPP :

create a database such as 'streamlit_auth' and table 'users' in MySql.

   CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL UNIQUE,
    password VARCHAR(100) NOT NULL
);

--- insert username and password:---
INSERT INTO users (username, password) VALUES ('admin', 'admin123');

Step 2: create utils/auth.py (MySQL Authentication) :

from sqlalchemy import create_engine, text

# MySQL connection (adjust as needed)
engine = create_engine("mysql+pymysql://root:@localhost/streamlit_auth")

def validate_login(username, password):
    with engine.connect() as conn:
        result = conn.execute(
            text("SELECT * FROM users WHERE username = :u AND password = :p"),
            {"u": username, "p": password}
        )
        return result.fetchone() is not None

Step 3: create an app or login.py (Login Page) :

import streamlit as st
from utils.auth import validate_login

st.set_page_config(page_title="Login", layout="centered")

# Session init
if "logged_in" not in st.session_state:
    st.session_state.logged_in = False
if "username" not in st.session_state:
    st.session_state.username = ""

def login():
    st.title("🔐 Login Page")

    with st.form("login_form"):
        username = st.text_input("Username")
        password = st.text_input("Password", type="password")
        login_btn = st.form_submit_button("Login")

        if login_btn:
            if validate_login(username, password):
                st.session_state.logged_in = True
                st.session_state.username = username
                st.success("✅ Login successful")
                st.switch_page("pages/dashboard.py")
            else:
                st.error("❌ Invalid credentials")

if not st.session_state.logged_in:
    login()
else:
    st.switch_page("pages/dashboard.py")

Step 4: create pages/dashboard.py

import streamlit as st

st.set_page_config(page_title="Dashboard", layout="wide")

if "logged_in" not in st.session_state or not st.session_state.logged_in:
    st.warning("You must log in first.")
    st.stop()

st.title("📊 Dashboard")
st.write(f"Hello, **{st.session_state.username}**! Welcome to the dashboard.")

st.page_link("pages/page1.py", label="Go to Page 1")
st.page_link("pages/page2.py", label="Go to Page 2")

if st.button("Logout"):
    st.session_state.logged_in = False
    st.session_state.username = ""
    st.switch_page("app.py")

Step 5: create pages/page1.py

import streamlit as st

st.set_page_config(page_title="Page 1")

if "logged_in" not in st.session_state or not st.session_state.logged_in:
    st.warning("Login required.")
    st.stop()

st.title("📁 Page 1")
st.write(f"Hi, **{st.session_state.username}**. You are on Page 1.")
st.page_link("pages/dashboard.py", label="← Back to Dashboard")

Step 6: create pages/page2.py

import streamlit as st

st.set_page_config(page_title="Page 2")

if "logged_in" not in st.session_state or not st.session_state.logged_in:
    st.warning("Login required.")
    st.stop()

st.title("📁 Page 2")
st.write(f"Hi, **{st.session_state.username}**. You are on Page 2.")
st.page_link("pages/dashboard.py", label="← Back to Dashboard")

Step 7: requirements.txt

streamlit
sqlalchemy
pymysql

(Install dependencies: pip install -r requirements.txt)

-------------------------------------------------------------
NB:
(i) To run : streamlit run app.py(press enter)
(ii) Here, in the above case we can use default Login as - 
     Username: admin
     Password: admin123

Loading

Categories: Streamlit

0 Comments

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.