Creating an app with Django
Now, we will create our first app with Django and we will analyze the directory structure that Django creates. First, go to the root folder for the virtual environment: 01
.
In Linux or macOS, enter the following command:
cd ~/HillarDjangoREST/01
If you prefer Command Prompt, run the following command in the Windows command line:
cd /d %USERPROFILE%\HillarDjangoREST\01
If you prefer Windows PowerShell, run the following command in Windows PowerShell:
cd /d $env:USERPROFILE\HillarDjangoREST\01
In Linux or macOS, run the following command to create a new Django project named restful01
. The command won't produce any output:
python bin/django-admin.py startproject restful01
In Windows, in either Command Prompt or PowerShell, run the following command to create a new Django project named restful01
. The command won't produce any output:
python Scripts\django-admin.py startproject restful01
The previous command creates a restful01
folder with other subfolders and Python files. Now, go to the recently created restful01
folder. Just execute the following command on any platform:
cd restful01
Then, run the following command to create a new Django app named toys
within the restful01
Django project. The command won't produce any output:
python manage.py startapp toys
The previous command creates a new restful01/toys
subfolder, with the following files:
views.py
tests.py
models.py
apps.py
admin.py
__init__.py
In addition, the restful01/toys
folder will have a migrations
subfolder with an __init__.py
Python script. The following diagram shows the folders and files in the directory tree, starting at the restful01
folder with two subfolders - toys
and restful01
:
Understanding Django folders, files, and configurations
After we create our first Django project and then a Django app, there are many new folders and files. First, use your favorite editor or IDE to check the Python code in the apps.py
file within the restful01/toys
folder (restful01\toys
in Windows). The following lines show the code for this file:
from django.apps import AppConfig class ToysConfig(AppConfig): name = 'toys'
The code declares the ToysConfig
class as a subclass of the django.apps.AppConfig
class that represents a Django application and its configuration. The ToysConfig
class just defines the name
class attribute and sets its value to 'toys'
.
Now, we have to add toys.apps.ToysConfig
as one of the installed apps in the restful01/settings.py
file that configures settings for the restful01
Django project. I built the previous string by concatenating many values as follows: app name + .apps.
+ class name, which is, toys
+ .apps.
+ ToysConfig
. In addition, we have to add the rest_framework
app to make it possible for us to use Django REST framework.
The restful01/settings.py
file is a Python module with module-level variables that define the configuration of Django for the restful01
project. We will make some changes to this Django settings file. Open the restful01/settings.py
file and locate the highlighted lines that specify the strings list that declares the installed apps. The following code shows the first lines for the settings.py
file. Note that the file has more code:
"""
Django settings for restful01 project.
Generated by 'django-admin startproject' using Django 1.11.5.
For more information on this file, see
https://docs.djangoproject.com/en/1.11/topics/settings/
For the full list of settings and their values, see
https://docs.djangoproject.com/en/1.11/ref/settings/
"""
import os
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/1.11/howto/deployment/checklist/
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = '+uyg(tmn%eo+fpg+fcwmm&x(2x0gml8)=cs@$nijab%)y$a*xe'
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
ALLOWED_HOSTS = []
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
Add the following two strings to the INSTALLED_APPS
strings list and save the changes to the restful01/settings.py
file:
'rest_framework'
'toys.apps.ToysConfig'
The following lines show the new code that declares the INSTALLED_APPS
string list with the added lines highlighted and with comments to understand what each added string means. The code file for the sample is included in the hillar_django_restful_01
folder:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# Django REST framework
'rest_framework',
# Toys application
'toys.apps.ToysConfig',
]
This way, we have added Django REST framework and the toys
application to our initial Django project named restful01
.