If you want a Python Django final year project that goes far beyond a basic CRUD application, the Online Banking System built with Django 6.0 and Bootstrap 5.3 is the one. It includes a full customer portal with OTP-based password reset via Gmail SMTP, a professional Jazzmin dark-themed admin panel, deposit and withdrawal workflows with account-type limits, filterable transaction history, and PBKDF2 password hashing — making it one of the most complete and secure Django projects available for BCA, MCA, and B.Tech CS students in 2026.
banking management system project in python
Also Explore on UpdateGadh:
Project Overview
| Project Name | Online Banking System |
| Backend | Python 3.13, Django 6.0 |
| Frontend | Bootstrap 5.3, Font Awesome 6.5, Google Fonts (Inter) |
| Database | SQLite |
| Admin Theme | django-jazzmin (Darkly dark theme) |
| Gmail SMTP with python-dotenv for secure credentials | |
| Authentication | Email-based login with PBKDF2 password hashing |
| Password Reset | 3-step OTP flow via Gmail SMTP (10-minute expiry) |
| Task Queue | Celery + Redis (optional, for background tasks) |
| Best For | BCA, MCA, B.Tech CS/IT Final Year Students Globally |
Key Features
- OTP-based password reset — 3-step flow (enter email → verify 6-digit OTP → set new password) delivered via Gmail SMTP with a 10-minute OTP expiry, making this feel like a real production banking app
- Account-type based withdrawal limits — Savings accounts cap at ₹50,000 and Current accounts at ₹1,00,000 per transaction, enforced automatically through the
BankAccountTypemodel - Filterable transaction history — customers filter their full deposit and withdrawal history by custom date ranges using a daterangepicker widget on the transaction report page
- Professional Jazzmin dark admin panel — full user management, bank account oversight, transaction monitoring with date hierarchy, and OTP verification logs all in one polished interface
- Multi-field customer registration — signup collects account type, gender, date of birth, initial deposit amount, and full address — stored across normalised
UserBankAccountandUserAddressmodels - Complete security implementation — PBKDF2 password hashing, CSRF protection on every form, login-required middleware on all protected views, and environment variables for sensitive credentials via
.env - Role-aware navigation — the navbar and home page redirect automatically based on whether the logged-in user is an admin or a customer, with completely separate dashboard views
🎬 Watch the Full Project Tutorial on YouTube!
We’ve built this project step by step on our YouTube channel. Watch the full video, like, and subscribe for daily project tutorials.
Technologies Used
| Layer | Technology | Purpose |
|---|---|---|
| Backend | Python 3.13 + Django 6.0 | Models, views, forms, URL routing, and ORM |
| Frontend | Bootstrap 5.3 + Font Awesome 6.5 | Responsive UI layout, icons, and components |
| Fonts | Google Fonts (Inter) | Clean professional typography across all pages |
| Database | SQLite | Lightweight relational database, zero setup needed |
| Admin Theme | django-jazzmin (Darkly) | Dark-themed professional admin dashboard |
| Gmail SMTP + python-dotenv | OTP password reset emails with secure credential loading | |
| Security | PBKDF2 + CSRF + Login middleware | Password hashing, form protection, and route guarding |
| Date Picker | daterangepicker | Custom date range filter on transaction history page |
| Task Queue | Celery + Redis | Optional background task processing |
| Config | python-dotenv (.env) | Secure Gmail and secret key environment variable loading |
Project Folder Structure
Online Banking System/
├── manage.py
├── requirements.txt
├── .env # Gmail SMTP + Django secret key
├── db.sqlite3
│
├── banking_system/ # Project settings
│ ├── settings.py # Django settings + Jazzmin config
│ ├── urls.py # Root URL configuration
│ ├── celery.py
│ ├── wsgi.py
│ └── asgi.py
│
├── accounts/ # User and authentication app
│ ├── models.py # User, UserBankAccount, BankAccountType,
│ │ # UserAddress, OTPVerification
│ ├── views.py # Registration, Login, Dashboard, Profile,
│ │ # Password Reset (OTP 3-step)
│ ├── forms.py # Registration, Login, ProfileUpdate, OTP
│ ├── urls.py # 8 URL patterns
│ ├── admin.py # Enhanced Jazzmin admin classes
│ ├── managers.py # Custom UserManager (email-based auth)
│ └── constants.py # Gender choices
│
├── transactions/ # Banking transactions app
│ ├── models.py # Transaction model
│ ├── views.py # Deposit, Withdraw, Transaction Report
│ ├── forms.py # Deposit, Withdraw, DateRange forms
│ ├── urls.py # 3 URL patterns
│ ├── admin.py # TransactionAdmin
│ └── constants.py # Transaction type constants
│
├── core/ # Landing page app
│ └── views.py # HomeView with role-based redirect
│
├── templates/
│ ├── core/
│ │ ├── base.html # Master template (Bootstrap 5 + FA 6)
│ │ ├── navbar.html # Role-aware navbar
│ │ ├── footer.html
│ │ ├── index.html # Landing page (hero + features + CTA)
│ │ └── messages.html
│ ├── accounts/
│ │ ├── user_registration.html
│ │ ├── user_login.html
│ │ ├── dashboard.html # Customer control panel
│ │ ├── profile.html
│ │ ├── password_reset_request.html # Step 1: Enter email
│ │ ├── otp_verify.html # Step 2: Enter OTP
│ │ └── password_reset_new.html # Step 3: New password
│ └── transactions/
│ ├── transaction_form.html # Deposit / Withdraw
│ └── transaction_report.html # Transaction history table
│
└── static/Get This Project
User Panel



Admin

This is a complete, ready-to-run paid project. It includes the full Django source code, all models, views, forms and templates, SQLite database, Jazzmin admin setup, Gmail SMTP configuration guide, and remote setup support from our team.
Online Banking System — Python Django 6.0 + Bootstrap 5.3 + SQLite
Full source code + Jazzmin admin + OTP email setup + remote support included
Need help after purchase? Contact us on WhatsApp or via our support page
How to Run This Project
Step 1 — Enter the project folder
cd "Online Banking System Step 2 — Create a virtual environment and activate it
python -m venv venv
# Windows
venv\Scripts\activate
# macOS / Linux
source venv/bin/activateStep 3 — Install all dependencies
pip install -r requirements.txt
pip install django-jazzmin python-dotenvStep 4 — Configure your .env file
Create a .env file in the project root and add your credentials:
EMAIL_HOST_USER=your-gmail@gmail.com
EMAIL_HOST_PASSWORD=your-16-char-app-password
SECRET_KEY=your-django-secret-key-hereTo get a Gmail App Password: go to Google Account → Security → 2-Step Verification → App Passwords and generate a 16-character password for this app.
Step 5 — Run database migrations
python manage.py migrateStep 6 — Create superuser and seed bank account types
python manage.py createsuperuser
# Then seed account types via Django shell:
python manage.py shellfrom accounts.models import BankAccountType
BankAccountType.objects.create(name='Savings', maximum_withdrawal_amount=50000, annual_interest_rate=5.00, interest_calculation_per_year=12)
BankAccountType.objects.create(name='Current', maximum_withdrawal_amount=100000, annual_interest_rate=2.00, interest_calculation_per_year=4)
exit()Step 7 — Start the development server
python manage.py runserverOpen http://127.0.0.1:8000/ in your browser. Use the default test credentials below to explore both portals.
# Admin login
Email : admin@gmail.com
Password : Admin@1234
# Customer login
Email : customer@gmail.com
Password : Customer@1234URL Routes Reference
| URL | Description | Access |
|---|---|---|
| / | Landing page with role-based redirect | Public |
| /accounts/register/ | Customer registration form | Public |
| /accounts/login/ | Customer and admin login | Public |
| /accounts/password-reset/ | Password reset — Step 1: Enter email | Public |
| /accounts/password-reset/verify/ | Password reset — Step 2: OTP verification | Public |
| /accounts/password-reset/new-password/ | Password reset — Step 3: Set new password | Public |
| /accounts/dashboard/ | Customer dashboard with balance and stats | Login required |
| /accounts/profile/ | Edit customer name and phone | Login required |
| /transactions/deposit/ | Deposit money form | Login required |
| /transactions/withdraw/ | Withdraw money with account-type limit | Login required |
| /transactions/report/ | Filterable transaction history | Login required |
| /admin/ | Jazzmin admin panel | Staff only |
How It Works
Customer registration and dashboard flow
- Customer fills the registration form — name, email, password, account type, gender, DOB, initial deposit, and address
- Django creates a
Userrecord (email-based), a linkedUserBankAccountwith a generated account number, and aUserAddressrecord - On login, the
HomeViewchecks the user role and redirects to the customer dashboard - The dashboard displays current balance, stat cards (total deposits, withdrawals), quick action tiles, and recent transactions
OTP password reset flow
- Customer clicks Forgot Password and enters their registered email address
- Django generates a random 6-digit OTP, saves it to
OTPVerificationwith a 10-minute expiry, and sends it via Gmail SMTP using credentials from the.envfile - Customer enters the OTP on the verify page — if correct and not expired, they proceed to Step 3
- Customer sets and confirms the new password — Django hashes it with PBKDF2 and updates the user record
Deposit and withdrawal flow
- Customer navigates to Deposit or Withdraw from their dashboard quick action tiles
- Deposit instantly adds the entered amount to the
UserBankAccountbalance and creates aTransactionrecord - Withdrawal checks the entered amount against the
BankAccountType.maximum_withdrawal_amount— the form rejects it if the limit is exceeded - On success, the transaction is saved and the updated balance is reflected immediately on the dashboard
Transaction history filter flow
- Customer opens the Transaction Report page which shows all their transactions in a table
- They pick a start and end date using the daterangepicker widget and submit the filter
- Django filters the
Transactionqueryset by the selected date range and returns matching records - The filtered table shows transaction type (Deposit/Withdrawal), amount, and timestamp for each record
Why This is a Great Final Year Project
- Django 6.0 with email-based authentication — custom
UserManagerreplaces username with email, a real-world pattern used in most modern web apps - OTP password reset via Gmail SMTP — very few student projects implement a real 3-step OTP flow with expiry; this alone makes your project unforgettable during viva
- Jazzmin dark admin panel — looks like a commercial product from the first screenshot; examiners immediately see the difference from a standard Django admin setup
- Account-type based withdrawal limits — demonstrates database-driven business rule enforcement, a concept that is always tested in placement interviews
- Complete security checklist — PBKDF2 hashing, CSRF protection, login middleware, OTP expiry, and
.envsecrets management all covered in one project - Normalised database design — five separate models (User, UserBankAccount, BankAccountType, UserAddress, OTPVerification) shows proper relational database design
- Zero extra server setup — SQLite requires no installation; the entire project runs with just Python and pip on any laptop in under 10 minutes
You Might Also Like:
- Blood Bank Management System using Python Django and SQLite
- GST Billing Project in Python Django — Full Source Code
- Expense Tracker using Python Django — Free Download
- Disaster Management System in Django — Python Project
- Bank Management System in Python — Free Source Code
- All Python and Django Projects with Source Code — UpdateGadh
Keyword Details
- banking management system project
- banking management system project in java
- banking management system project in python
- banking management system project pdf
- banking management system project class 12
- banking management system project report pdf
- banking management system project in c++
- banking management system project in software engineering
- banking management system project in c language
- banking management system project in mern stack
- banking management system project in python
- banking management system project in python class 12
- banking management system project in python pdf
- banking management system project in python with mysql source code
- banking management system project in python class 12 pdf
- banking management system project in python with mysql class 12
- banking management system project in python with source code
- banking management system project in python with mysql pdf
- banking management system project in python ppt
- banking management system project in python and sql
🎓 Need Complete Final Year Project?
Get Source Code + Report + PPT + Viva Questions (Instant Access)
🛒 Visit UpdateGadh Store →