Django settings
- A Django settings file contains all the
configuration
of your Django installation. - A settings file is just a Python module with module-level variables.
# setting example
ALLOWED_HOSTS = ['www.example.com']
DEBUG = False
DEFAULT_FROM_EMAIL = '[email protected]'
5.1 BASE_DIR
BASE_DIR
points to top hierarchy of project
import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# mysite/mysite/setting.py
5.2 DEBUG
- In Development Error is very obvious to occur.
- Django provides an inbuilt Debugger which makes the developer’s life very easy
# In Developement
DEBUG = True
# In production,
DEBUG = False
5.3 ALLOWED_HOSTS
ALLOWED_HOSTS
is list having addresses of all domains which can run your Django Project.- It can
not be an empty
list
# 127.0.0.1 --> represents Your PC,
# *.heroku.com --> represents heroku
# i.e. local PC and heroku can run my project
ALLOWED_HOSTS=[“127.0.0.1”, “*.heroku.com”]
5.4 INSTALLED_APPS
- We mention all apps that will be used in our Django project.
INSTALLED_APPS = [
# don't forget to quote it and also commas after every app
'polls',
]
5.5 DATABASES
- Django officially supports the following databases
PostgreSQL
, MariaDB, MySQL, OracleSQLite
<– By Default
# Default DB setting --> with SQLite
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': 'mydatabase',
}
}
PostgreSQL
DB setup
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'mydatabase',
'USER': 'mydatabaseuser',
'PASSWORD': 'mypassword',
'HOST': '127.0.0.1',
'PORT': '5432',
}
}
- To use other Database change
ENGINE
- You can use a database backend that doesn’t ship with Django
- By setting ENGINE to a fully-qualified path (i.e. mypackage.backends.whatever)
# ENGINE
'django.db.backends.postgresql'
'django.db.backends.mysql'
'django.db.backends.sqlite3'
'django.db.backends.oracle'
ALT
DEFAULT_DATABASE_CONFIG = dj_database_url.config(
default='postgres://:ss', conn_max_age=120)
DEFAULT_DATABASE_CONFIG.update({
'OPTIONS': {
'isolation_level': psycopg2.extensions.ISOLATION_LEVEL_REPEATABLE_READ,
}
})
DATABASES = {
'default': DEFAULT_DATABASE_CONFIG,
}
5.6 URL/Root Variables
STATIC_URL
- It is the folder in each app, where Django will
look for static files
- It is the folder in each app, where Django will
MEDIA_URL
- It is same as STATIC_URL but used for
media files
- It is same as STATIC_URL but used for
STATICFILES_DIRS
- It is the list of folders where Django will search for
additional static files
- Static assets that aren’t tied to a particular app
- It is the list of folders where Django will search for
MEDIA_ROOT
- It is the folder where
files uploaded
using FileField will go.
- It is the folder where
STATIC_ROOT
- It is the folder where static
files collected after
using manage.pycollectstatic
- It is the folder where static
# Inside each app --> mysite/polls/static/
STATIC_URL = 'static/'
MEDIA_URL = '/media/'
# Project level
STATICFILES_DIRS = (
# mysite/static_in_pro/frontend/
os.path.join(BASE_DIR, "static_in_pro", "frontend"),
# mysite/static/
os.path.join(BASE_DIR, "static"),
)
5.7 Templates
- Change Templates Dir
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
.... }]
5.8 Middleware
- Middleware is a
lightweight plugin
(python class) thathooks
into Django’srequest/response life cycle
- Middleware is used to
perform a function
in the application likesecurity
,session
, csrf protection,authentication
etc
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
- The
order in MIDDLEWARE matters
because a middleware can depend on other middleware- For instance,
AuthenticationMiddleware
stores the authenticated user in the session; - Therefore, it must
run after SessionMiddleware
.
- For instance,
- A Django installation doesn’t require any middleware — MIDDLEWARE can be empty,
- if you’d like — but it’s strongly suggested that you at least use CommonMiddleware
- The MIDDLEWARE list is like an onion
- So each
request
passes through fromtop to bottom
- And
response
is in reverse order (bottom to up
).
- So each
- CSRF middleware
- csrf_protect()
- csrf_token tag
- csrf_exempt()
https://vegibit.com/how-to-create-and-use-custom-django-middleware/
setting.py
LOGIN_REDIRECT_URL = ‘home’ LOGIN_URL = ‘login’
Reference
- Database setup
- https://stackoverflow.com/questions/24022558/differences-between-staticfiles-dir-static-root-and-media-root
- https://docs.djangoproject.com/en/2.1/howto/static-files/
- Middleware
- https://vegibit.com/how-to-create-and-use-custom-django-middleware/
- https://simpleisbetterthancomplex.com/tutorial/2016/07/18/how-to-create-a-custom-django-middleware.html
- https://docs.djangoproject.com/en/3.0/ref/csrf/#using-csrf