A modern community-driven discussion platform built with Django, allowing users to create topic-based rooms, participate in conversations, exchange knowledge, and manage personalized profiles.
This project was developed as part of an in-depth journey into Django development, covering real-world concepts such as authentication, authorization, database relationships, custom user models, media uploads, password recovery, and introductory REST API development.
The goal was not only to build a functional application, but also to gain a solid understanding of how modern Django applications are structured and maintained.
- User Registration
- User Login & Logout
- Email-Based Authentication
- Password Reset via Email
- Protected Views using Authentication Decorators
- Ownership-Based Authorization
- Password Validation
- Environment Variable Protection
The project uses a custom Django User model extending AbstractUser, allowing future scalability and customization.
Features include:
- Custom User Model
- Unique Email Address
- User Biography
- User Avatar
- Custom Authentication Field
- Editable Profile Information
Users can:
- Upload Profile Pictures
- Update Personal Information
- Edit Username
- Edit Email Address
- Add Personal Biography
- View Personal Activity
Users can:
- Create Rooms
- Update Rooms
- Delete Rooms
- Organize Rooms by Topics
- Search Rooms
- View Room Participants
- Join Discussions
Each room contains:
- Host User
- Topic
- Participants
- Messages
- Creation Timestamp
- Last Update Timestamp
The application includes a complete room-based messaging system.
Features:
- Post Messages
- Delete Own Messages
- Room Conversations
- Recent Activity Feed
- Human-Friendly Time Display
The platform tracks room participation through a Many-to-Many relationship between users and rooms.
Features:
- Automatic Participant Registration
- Participant Listing
- Room Membership Tracking
Users can search rooms by:
- Topic Name
- Room Name
- Host Username
- Room Description
The search functionality is powered by Django ORM and Q Objects.
The project demonstrates practical usage of relational database design through Django ORM.
User → Room
Topic → Room
User → Message
Room → Message
Implemented using:
models.ForeignKey()User ↔ Room (Participants)
Implemented using:
models.ManyToManyField()This project includes the first steps toward REST API development using Django REST Framework.
Implemented endpoints:
GET /api/
GET /api/rooms/
GET /api/rooms/<id>/
Implemented concepts:
- Django REST Framework
- Function-Based API Views
- Serializers
- JSON Responses
- API Routing
This serves as the foundation for future API expansion across the entire application.
The application supports user-uploaded media using Django's media system.
Features:
- Avatar Uploads
- Default Profile Images
- Dynamic Media Serving
- Media Storage Configuration
- Python 3
- Django 6.0.5
- Django REST Framework
- SQLite
- HTML5
- CSS3
- JavaScript
- Pillow
- SMTP Email Services
- Python Dotenv
Throughout this project I gained hands-on experience with:
- Django Models
- Django ORM
- QuerySets
- Authentication & Authorization
- Custom User Models
- ModelForms
- Form Validation
- Database Relationships
- Media Uploads
- Password Recovery Systems
- REST APIs
- URL Routing
- Function-Based Views
- Project Structure Organization
git clone https://github.com/YOUR_USERNAME/Study-Room.git
cd Study-Roompython -m venv .venv
source .venv/bin/activatepython -m venv .venv
.venv\Scripts\activatepip install -r requirements.txtCreate a file named:
.env
Add the following values:
SECRET_KEY=your_secret_key
EMAIL_USER=your_email
EMAIL_PASS=your_email_passwordApply migrations:
python manage.py migratepython manage.py createsuperuserpython manage.py runserverOpen:
http://127.0.0.1:8000/
Study-Room/
│
├── base/
│ ├── api/
│ ├── migrations/
│ ├── templates/
│ ├── models.py
│ ├── forms.py
│ ├── views.py
│ └── urls.py
│
├── static/
├── templates/
├── StudyRooms/
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
│
├── db.sqlite3
├── manage.py
├── .env
└── requirements.txt
Planned future enhancements include:
- Complete REST API Coverage
- JWT Authentication
- Room Join / Leave Workflow
- Notification System
- Direct Messaging
- Real-Time Chat using WebSockets
- Docker Support
- Production Deployment
- Automated Testing
Mohammed Albasha
This project represents a practical exploration of Django development, focusing on building real-world applications while understanding the framework from the ground up.
This project is open-source and intended for educational and learning purposes.





