title: FastAPI Simple Auth Docs Upload
emoji: π
colorFrom: indigo
colorTo: purple
sdk: docker
pinned: false
Task 1: FastAPI File Management Application
A modern, fast, and secure web application built with FastAPI, MySQL, and Jinja2. This application allows users to register, log in, manage their profiles, and securely upload, download, and delete files through a beautiful dark-themed, glassmorphic UI.
π Features
- User Authentication: Secure signup and login functionality using hashed passwords (bcrypt) and cookie-based session management.
- File Management: Upload (up to 2 files at once), download, and delete files securely.
- Interactive Dashboard: A user-friendly dashboard to view all stored files, track upload times, and manage data.
- RESTful API: Along with the frontend, the app provides standard JSON API endpoints for profile management and system interactions.
- Glassmorphic UI: A stunning, responsive frontend built with customized CSS and Jinja2 templates.
π οΈ Tech Stack
- Backend: FastAPI (Python)
- Database: MySQL (via SQLAlchemy ORM)
- Frontend: HTML5, CSS3 (Glassmorphism), Jinja2 Templates
- Authentication: JWT token-based auth stored in HTTP-only cookies
- File Storage: Local filesystem (
backend/uploaded_files/)
π Prerequisites
Before you begin, ensure you have the following installed:
- Python 3.9+
- MySQL Server (running locally or remotely)
pip(Python package manager)
βοΈ Installation & Setup
Clone or Download the Repository Navigate to the project directory:
cd "g:\Soft Mania\internship\task 1"Set Up a Virtual Environment
python -m venv venv # On Windows: .\venv\Scripts\activate # On macOS/Linux: source venv/bin/activateInstall Dependencies Install all required packages from
req.txt:pip install -r req.txtDatabase Configuration Ensure your MySQL server is running. Create a database (e.g.,
testbd). Update theDATABASE_URLstring inbackend/main.pyif your database credentials differ from:SQLALCHEMY_DATABASE_URL = "mysql+pymysql://root:root@localhost/testbd"Run the Application Start the FastAPI development server using Uvicorn:
python -m uvicorn backend.main:app --host 0.0.0.0 --port 8890 --reload
π Usage Guide
Once the server is running, the application is accessible through your web browser.
π Web Interface (UI)
- Home / Login: Navigate to
http://localhost:8890/loginto access the login portal. - Sign Up: If you are a new user, click "Sign up" on the login page or navigate to
http://localhost:8890/signupto create a new account. - Dashboard: Upon logging in, you will be redirected to
http://localhost:8890/dashboard.- Uploading: Use the "Upload Files" panel to select and upload up to 2 files (PDF, PNG, JPG/JPEG).
- Managing Files: View your uploaded files in the "Your Files" table. Click β¬ Download to save them locally, or π Delete to remove them permanently from the server.
- Logout: Click the "Logout" button in the top right corner of the dashboard to securely end your session.
π API Endpoints (For Developers)
The application also exposes JSON endpoints that can be tested via tools like Postman or cURL.
(Note: Some UI and API routes share paths depending on the method and Accept headers).
POST /signup- Register a new user (Form Data or JSON).POST /login- Authenticate and receive an access token.GET /users/me- Retrieve current logged-in user details.POST /upload- Upload files via API.GET /files- List all files belonging to the auth user.DELETE /files/{id}- Delete a specific file.
π Project Structure
task 1/
β
βββ backend/
β βββ main.py # Main FastAPI application & routes
β βββ templates/ # Jinja2 HTML Templates
β β βββ base.html # Global layout wrapper
β β βββ login.html # Login page
β β βββ signup.html # Registration page
β β βββ dashboard.html # User file management dashboard
β βββ static/
β β βββ style.css # Design system & Glassmorphic styles
β βββ uploaded_files/ # Secure directory for user uploads
β
βββ req.txt # Project dependencies list
βββ .gitignore # Files ignored by version control
βββ README.md # This documentation file
π Security Notes
- Passwords are securely hashed using
bcryptbefore being stored in MySQL. - Uploaded files are renamed with unique identifiers to prevent overwriting and path traversal attacks.
- Session tokens are stored in
httponlybrowser cookies for the UI flow to mitigate XSS risks.