Django Knowledgebase
Installation
pip install django
Commands
django-admin startproject <project-name>
- Create a Django project
python manage.py runserver
- Run the Django dev server
python manage.py makemigrations
- Create Migration Scripts
python manage.py migrate
- Migrate Database
File Structure
project-name/ ← higher level folder |-- project-name/ ← django project folder | |-- project-name/ | | |-- init.py | | |-- settings.py | | |-- urls.py | | |-- wsgi.py | +-- manage.py
Five main files of the base project are as follows:
manage.py - Used to run management commands related to the project [migrations, run server, etc]
init.py - Empty file to indicate Python that this is a package
settings.py - Whole projects configuration file
urls.py - Maps all the requests to the routes/paths
wsgi.py - Used for deployment
A Django project can have multiple apps for different functionalities in it.
In this file tree, we have created an app called sampleapp
project-name/ |-- project-name/ | |-- sampleapp/ <-- our new django app! | | |-- migrations/ | | | +-- __init__.py | | |-- __init__.py | | |-- admin.py | | |-- apps.py | | |-- models.py | | |-- tests.py | | +-- views.py | |-- project-name/ | | |-- __init__.py | | |-- settings.py | | |-- urls.py | | |-- wsgi.py | +-- manage.py
Creating Databse in PostgreSQL
createdb -U {{username}} -h localhost --owner={{username}}--lc-ctype='en_US.UTF-8' --lc-collate='en_US.UTF-8' --encoding='UTF8' -e {{db name}};
Copying Database in PostgreSQL
CREATE DATABASE {{new_db}} WITH TEMPLATE {{original_db}} OWNER {{username}};
Dropping Database in PostgreSQL
dropdb -U {{username}} -h localhost {{db_name}};
Adding Table in PostgreSQL
ALTER TABLE table_name ADD COLUMN new_column_name data_type;
Copy Data from one column to another
UPDATE {{table_name}} SET {{column1}} = {{column2}}
Dropping Table in PostgreSQL
DROP TABLE {{table_name}};
Dropping Column in PostgreSQL
ALTER TABLE {{table_name}} DROP COLUMN {{column_name}};
Import CSV File Into PosgreSQL Table
Example
CREATE TABLE persons ( id serial NOT NULL, first_name character varying(50), last_name character varying(50), dob date, email character varying(255), CONSTRAINT persons_pkey PRIMARY KEY (id) )
Change DB to Postgres
In your projects setting.py, change the following
. . .DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } }
. . .
to
. . .DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': '{{db name}}', 'USER': '{{username}}', 'PASSWORD': '{{password}}', 'HOST': 'localhost', 'PORT': '', # Leave it empty to use default - 5432 } }
. . .
After changing the backend,
python manage.py makemigrations
- Create the migration scripts
python manage.py migrate
- Run the migration scripts
Creating Python Virtual Environment
python3 -m venv /path/for/virtual/environment