python-only / app.py
Gagan0141's picture
Update app.py
7cbd08c verified
import gradio as gr
import sqlite3
import os
DB_PATH = "temp.db"
# --- Database Setup ---
def init_db():
conn = sqlite3.connect(DB_PATH)
cursor = conn.cursor()
cursor.execute("""
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT UNIQUE,
password TEXT
)
""")
conn.commit()
conn.close()
init_db()
# --- Functions ---
def signup(username, password):
if not username or not password:
return "⚠️ Please enter both username and password."
conn = sqlite3.connect(DB_PATH)
cursor = conn.cursor()
try:
cursor.execute("INSERT INTO users (username, password) VALUES (?, ?)", (username, password))
conn.commit()
conn.close()
return "βœ… Signup successful! Please login."
except sqlite3.IntegrityError:
conn.close()
return "❌ Username already exists. Try another."
def login(username, password):
if username == "1234" and password == "1234":
return "βœ… Admin logged in! You can download the database.", "Admin"
conn = sqlite3.connect(DB_PATH)
cursor = conn.cursor()
cursor.execute("SELECT * FROM users WHERE username=? AND password=?", (username, password))
user = cursor.fetchone()
conn.close()
if user:
return f"βœ… Welcome, {username}!", username
else:
return "❌ Invalid credentials.", None
def logout():
return "βœ… Logged out successfully!", None
def update_home(user):
if user == "Admin":
return "πŸ‘‘ Welcome Admin! You can download the DB."
elif user:
return f"🏠 Welcome Home, {user}!"
else:
return "❌ Please login first."
def download_db(user):
if user == "Admin" and os.path.exists(DB_PATH):
return DB_PATH
return None
# --- Gradio UI ---
with gr.Blocks() as demo:
gr.Markdown("## πŸ” Simple Login System with Signup & DB Download")
current_user = gr.State()
with gr.Tab("Signup"):
signup_user = gr.Textbox(label="Username")
signup_pass = gr.Textbox(label="Password", type="password")
signup_btn = gr.Button("Signup")
signup_out = gr.Textbox(label="Signup Status", interactive=False)
signup_btn.click(signup, inputs=[signup_user, signup_pass], outputs=signup_out)
with gr.Tab("Login"):
login_user = gr.Textbox(label="Username")
login_pass = gr.Textbox(label="Password", type="password")
login_btn = gr.Button("Login")
login_status = gr.Textbox(label="Login Status", interactive=False)
login_btn.click(login, inputs=[login_user, login_pass], outputs=[login_status, current_user])
with gr.Tab("Home"):
home_status = gr.Textbox(label="Home Status", interactive=False)
logout_btn = gr.Button("Logout")
download_btn = gr.File(label="Download DB", interactive=False)
# Update home page whenever current_user changes
current_user.change(update_home, inputs=current_user, outputs=home_status)
# Logout clears user
logout_btn.click(logout, outputs=[home_status, current_user])
# Enable DB download only for Admin
current_user.change(download_db, inputs=current_user, outputs=download_btn)
demo.launch()