A full-stack Library Management System with:
- Django REST backend
- Flutter frontend (web)
- JWT authentication
- Custom user model
- Book browse/search/borrow/favorite flows
- Backend: Django, Django REST Framework, SimpleJWT
- Frontend: Flutter, Riverpod
- Database: SQLite (default) or MySQL
Library-Management-System/
├── django_backend/
│ ├── library_project/
│ │ ├── library_project/ # Django settings/urls
│ │ ├── library_app/ # Models, API, migrations, commands
│ │ ├── Media/ # Uploaded/generated images
│ │ └── manage.py
│ └── requirements.txt
├── flutter_app/
│ ├── lib/
│ └── web/
└── README.md
- Python 3.10+
- Flutter SDK
- Chrome browser (for Flutter web)
- Optional: MySQL 8+
From repo root:
cd django_backend
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txtRun migrations:
cd library_project
python manage.py migrateStart backend:
python manage.py runserver 127.0.0.1:8001Backend base URL used by Flutter in this project:
http://127.0.0.1:8001/
From repo root:
cd flutter_app
flutter clean
flutter pub get
flutter run -d chromeFrom django_backend/library_project:
python manage.py seed_popular_booksCreates clean placeholder covers with title/author/genre so users can identify books.
python manage.py generate_simple_covers --forceRequires internet access.
python manage.py fetch_official_covers --forceBy default, project uses SQLite. To use MySQL:
Create DB:
CREATE DATABASE library_management CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;Set env vars before runserver:
export DB_ENGINE=mysql
export MYSQL_DATABASE=library_management
export MYSQL_USER=root
export MYSQL_PASSWORD=your_password
export MYSQL_HOST=127.0.0.1
export MYSQL_PORT=3306Then migrate:
python manage.py migrateCreate superuser:
python manage.py createsuperuserAdmin URL:
http://127.0.0.1:8001/admin/
- Confirm backend is running on
127.0.0.1:8001 - Confirm books exist:
python manage.py shell -c "from library_app.models import Book; print(Book.objects.count())" - Regenerate covers:
python manage.py generate_simple_covers --force
- Hard refresh browser (
Ctrl+Shift+R)
Use a different username, or log in with the existing account.
From django_backend/library_project:
python manage.py check
python manage.py showmigrations
python manage.py seed_popular_books
python manage.py generate_simple_covers --forceMIT License. See LICENSE.