Hey developers! Welcome to the first CollabSphere series. In this post, we'll set up CollabSphere with a modular architecture, separating our application into distinct components: users, rooms, and chat.
Let's dive in!
Project Structure and Initial Setup
Setting Up the Virtual Environment
# create a folder named `CollabSphere`
mkdir CollaSphere
cd CollaSphere
# Create a new virtual environment
python -m venv .venv
# Activate the virtual environment
# For Windows
.venv\Scripts\activate
# For macOS/Linux
source .venv/bin/activate
# Install required packages
pip install django djangorestframework channels
pip install python-dotenv # for environment variables
Creating django project
# Create a new Django project
django-admin startproject collabsphere .
mkdir apps
cd apps
# Create our main chat, users, and room application
python manage.py startapp chat
python manage.py startapp users
python manage.py startapp rooms
Project Configuration
# collabSphere/settings.py
import os
from pathlib import Path
BASE_DIR = Path(__file__).resolve().parent.parent
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# Third-party apps
'rest_framework',
'channels',
# Local apps
'apps.users.apps.UsersConfig',
'apps.rooms.apps.RoomsConfig',
'apps.chat.apps.ChatConfig',
]
# Custom user model
AUTH_USER_MODEL = 'users.User'
# Update app directories
import sys
sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))
Creating requirements.txt for our dependencies requirements
# command
pip freeze > requirements.txt
asgiref==3.8.1
Django==5.1.3
djangorestframework==3.15.2
python-decouple==3.8
sqlparse==0.5.2
typing_extensions==4.12.2
pillow == 11.0.0
channels
URL Configuration
# collabSphere/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('apps.users.urls')),
path('rooms/', include('apps.rooms.urls')),
path('chat/', include('apps.chat.urls')),
]
This will be our path to our applications
Project Organization
Here's our final project structure:
CollabSphere/
├── apps/
│ ├── users/
│ │ ├── migrations/
│ │ ├── __init__.py
│ │ ├── admin.py
│ │ ├── apps.py
│ │ ├── forms.py
│ │ ├── models.py
│ │ ├── urls.py
│ │ └── views.py
│ ├── rooms/
│ │ ├── migrations/
│ │ ├── __init__.py
│ │ ├── admin.py
│ │ ├── apps.py
│ │ ├── models.py
│ │ ├── urls.py
│ │ └── views.py
│ └── chat/
│ ├── migrations/
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── consumers.py
│ ├── models.py
│ ├── urls.py
│ └── views.py
├── collabSphere/
│ ├── __init__.py
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── static/
├── docs/
├── tests/
├── manage.py
└── requirements.txt
Key Benefits of This Structure
- Separation of Concerns: Each app handles its specific functionality
- Maintainability: Easier to maintain and debug code
- Scalability: Can easily add new features or modify existing ones
- Reusability: Apps can be reused in other projects
- Testing: Easier to write and organize tests
Next Steps
In the next post, we'll cover:
- User model (extending Django's AbstractUser)
- Custom user registration
- Login/logout views
- User profiles
Resources
collabsphere github link
That’s all for today. We’ll see you in our next series!
Top comments (0)