Python > Web Development with Python > Django > Project Structure and Applications
Django Project Structure Example
This example demonstrates a basic Django project structure with separate applications for different functionalities. It showcases how to organize your code for better maintainability and scalability.
Initial Project Setup
This command creates the basic project structure for your Django project. It includes the `manage.py` file and a project directory containing settings, URLs, and WSGI configuration.
django-admin startproject myproject
Creating Applications
These commands create two Django applications: `users` for user-related functionalities and `products` for product-related functionalities. Each application will have its own directory with models, views, templates, and other related files.
python manage.py startapp users
python manage.py startapp products
Project Directory Structure
This code represents the typical directory structure after creating a Django project and two applications. Each app (users and products) has its own set of files for models, views, and other components. The outer 'myproject' folder contains project-level settings and URLs.
# myproject/
# ├── manage.py
# ├── myproject/
# │ ├── __init__.py
# │ ├── asgi.py
# │ ├── settings.py
# │ ├── urls.py
# │ └── wsgi.py
# ├── users/
# │ ├── migrations/
# │ │ └── __init__.py
# │ ├── __init__.py
# │ ├── admin.py
# │ ├── apps.py
# │ ├── models.py
# │ ├── tests.py
# │ └── views.py
# └── products/
# ├── migrations/
# │ └── __init__.py
# ├── __init__.py
# ├── admin.py
# ├── apps.py
# ├── models.py
# ├── tests.py
# └── views.py
Registering Applications in settings.py
You need to register your newly created applications in the `INSTALLED_APPS` list within your project's `settings.py` file. This tells Django to recognize and include your applications in the project.
# myproject/settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'users',
'products',
]
Creating a Simple Model in users app
This snippet defines a simple model called `UserProfile` within the `users` application. It includes fields for username and email. The `__str__` method provides a human-readable representation of the model.
# users/models.py
from django.db import models
class UserProfile(models.Model):
username = models.CharField(max_length=100)
email = models.EmailField()
def __str__(self):
return self.username
Real-Life Use Case
Imagine building an e-commerce platform. The `users` application could handle user authentication, profiles, and settings. The `products` application would manage product listings, categories, and inventory. Separating these concerns into different applications makes the project easier to manage and scale.
Best Practices
When to use them
Use multiple apps when your project involves diverse features or modules. For example, an e-commerce site might have apps for user accounts, product catalog, shopping cart, and order management. Avoid using multiple apps for tiny websites with very limited functionalities to keep project manageable.
pros
cons
FAQ
-
Why separate applications?
Separating applications promotes modularity, making the project easier to maintain, test, and scale. It also allows for reusability of components across different projects. -
How do applications communicate with each other?
Applications can communicate with each other through shared models, signals, or by importing functions and classes from one application into another. However, minimize tight coupling between applications to maintain their independence.