create a page with an option of creating a user account
To upload files, please first save the app
import streamlit as st
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import Session, DeclarativeBase
import hashlib
# Database setup
class Base(DeclarativeBase):
pass
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
username = Column(String(50), unique=True, nullable=False)
password = Column(String(256), nullable=False)
email = Column(String(120), unique=True, nullable=False)
# Create database and tables
engine = create_engine('sqlite:///users.sqlite')
Base.metadata.create_all(bind=engine)
def hash_password(password):
"""Hash a password using SHA-256"""
return hashlib.sha256(password.encode()).hexdigest()
def create_user(username, password, email):
"""Create a new user in the database"""
with Session(engine) as session:
# Check if username already exists
existing_user = session.query(User).filter_by(username=username).first()
if existing_user:
return False, "Username already exists"
# Check if email already exists
existing_email = session.query(User).filter_by(email=email).first()
if existing_email:
return False, "Email already exists"
# Create new user
hashed_password = hash_password(password)
new_user = User(username=username, password=hashed_password, email=email)
session.add(new_user)
try:
session.commit()
return True, "User created successfully"
except Exception as e:
session.rollback()
return False, str(e)
# Streamlit UI
st.title("Create User Account")
with st.form("user_form"):
username = st.text_input("Username")
email = st.text_input("Email")
password = st.text_input("Password", type="password")
confirm_password = st.text_input("Confirm Password", type="password")
submit_button = st.form_submit_button("Create Account")
if submit_button:
if not username or not email or not password or not confirm_password:
st.error("Please fill in all fields")
elif password != confirm_password:
st.error("Passwords do not match")
else:
success, message = create_user(username, password, email)
if success:
st.success(message)
else:
st.error(message)
# Display existing users (for demonstration purposes)
with Session(engine) as session:
users = session.query(User).all()
if users:
st.subheader("Registered Users")
user_data = [[user.username, user.email] for user in users]
st.table({"Username": [u[0] for u in user_data],
"Email": [u[1] for u in user_data]})
Hi! I can help you with any questions about Streamlit and Python. What would you like to know?