Understanding Project Structure in Django
When you create a new Django project, it generates a structured set of files and directories. This guide explains the purpose of each file and folder in a typical Django project.
Step 1: Creating a Django Project
To create a Django project, use the following command:
django-admin startproject myproject
This creates a directory named myproject with the following structure:
myproject/
manage.py
myproject/
__init__.py
asgi.py
settings.py
urls.py
wsgi.py
Step 2: Top-Level Directory
The myproject/ directory contains all the files and subdirectories for your Django project. It includes:
- manage.py: A command-line utility to manage your project. You can use it to run the development server, create apps, and perform migrations.
- myproject/: A subdirectory containing the core files of your project.
Step 3: The manage.py File
The manage.py file allows you to execute various commands. Examples:
python manage.py runserver # Starts the development server
python manage.py startapp myapp # Creates a new app
python manage.py migrate # Applies database migrations
Step 4: Project Subdirectory
The inner myproject/ directory contains configuration files for your project. Let's break it down:
__init__.py
An empty file that marks this directory as a Python package.
asgi.py
Entry point for ASGI-compatible web servers to serve your project. This is used for asynchronous communications.
import os
from django.core.asgi import get_asgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
application = get_asgi_application()
settings.py
Contains the configuration for your Django project. Examples of settings:
# Database settings
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
# Installed apps
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
urls.py
Defines URL patterns for your project. Example:
from django.contrib import admin
from django.urls import path
urlpatterns = [
path('admin/', admin.site.urls),
]
wsgi.py
Entry point for WSGI-compatible web servers to serve your project. This is used for deployment.
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
application = get_wsgi_application()
Step 5: Adding an App
Django projects are divided into apps. To create an app, run:
python manage.py startapp myapp
This generates a directory named myapp with the following structure:
myapp/
migrations/
__init__.py
admin.py
apps.py
models.py
tests.py
views.py
Step 6: Connecting an App to the Project
To use the new app, add it to the INSTALLED_APPS list in settings.py:
INSTALLED_APPS = [
'myapp',
]
Step 7: Next Steps
With this understanding of the Django project structure, you can now start building apps, defining models, creating views, and configuring URLs to build a fully functional web application!