create a personal blog
To upload files, please first save the app
import streamlit as st
from datetime import datetime
from sqlalchemy import create_engine, String, Text, DateTime
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session
# Database setup
class Base(DeclarativeBase):
pass
class BlogPost(Base):
__tablename__ = "posts"
id: Mapped[int] = mapped_column(primary_key=True)
title: Mapped[str] = mapped_column(String(200))
content: Mapped[str] = mapped_column(Text)
created_at: Mapped[datetime] = mapped_column(DateTime, default=datetime.utcnow)
engine = create_engine("sqlite:///blog.sqlite")
Base.metadata.create_all(bind=engine)
# Streamlit UI
st.title("My Personal Blog")
# Sidebar for adding new posts
with st.sidebar:
st.header("Add New Post")
title = st.text_input("Title")
content = st.text_area("Content")
if st.button("Create Post"):
with Session(engine) as session:
post = BlogPost(title=title, content=content)
session.add(post)
session.commit()
st.success("Post created successfully!")
# Main content area
st.header("Blog Posts")
with Session(engine) as session:
posts = session.query(BlogPost).order_by(BlogPost.created_at.desc()).all()
for post in posts:
st.subheader(post.title)
st.caption(f"Posted on {post.created_at.strftime('%B %d, %Y')}")
st.write(post.content)
st.divider()
Hi! I can help you with any questions about Streamlit and Python. What would you like to know?