Boilerplate Django Blog for production deployments!

Related tags

Djangocfe-django-blog
Overview

CFE Django Blog

THIS IS COMING SOON

This is boilerplate code that you can use to learn how to bring Django into production.

TLDR;

This is definitely coming soon -- basically a list of all commands to get this repo working locally.

Getting Started

Step 1: Fork / Clone

First, decide where this project will live.

mkdir -p ~/dev
cd ~/dev

I always use the ~/Dev folder which translates to /users/cfe/Dev (macOS / Linux) or C:\Users\cfe\Dev (windows). This location is optional.

Fork or clone this repo:

git clone https://github.com/codingforentrepreneurs/cfe-django-blog

Step 2: Create a Virtual Environment

Isolate your python project from other python projects by using the built-in venv module:

python3.10 -m venv venv
  • I recommend Python 3.8 and up
  • You can use any virtual environment manager (poetry, pipenv, virtualenv, etc)

Step 3: Activate Virtual Environment

macOS/Linux

source venv/bin/activate

Windows

.\venv\Scripts\activate

Step 4: Install Requirements

$(venv) python -m pip install pip --upgrade
$(venv) python -m pip install -r requirements.txt
  • $(venv) is merely denoting the virtual environment is activated
  • In requirements.txt you'll see django>=3.2,<4.0 -- this means I'm using the latest version of Django 3.2 since it's an LTS release.
  • You can use venv/bin/python -m pip install -r requirements.txt (mac/linux) or venv\bin\python -m pip install -r requirements.txt (windows)
  • pip install ... is not as reliable as python -m pip install ...

Step 5: Select a Database

As of now, we have the following supported databases for this boilerplate code: sqlite, mysql, postgres

sqlite

No action needed. Django will managed sqlite for you.

mysql

To install Python client:

$(venv) python -m pip install mysqlclient

If macOS, you must run brew install mysql (assuming you have homebrew installed)

Be sure you add mysqlclient to requirements.txt like:

echo "mysqlclient" >> requirements.txt

Using the double >> vs a single > is the difference between appending and overwriting respectively.

postgres

$(venv) python -m pip install psycopg2

You may need to use python -m pip install psycopg2-binary during development.

Be sure you add psycopg2 to requirements.txt like:

echo "psycopg2" >> requirements.txt

Using the double >> vs a single > is the difference between appending and overwriting respectively.

Step 6: Setup your .env

Create your .env file.

echo "" > .env

Below is an example of development-ready .env file for this project. ALWAYS update these values when going into production.

# required keys
DJANGO_SECRET_KEY=gy_1$n9zsaacs^a4a1&-i%e95fe&d3pa+e^@5s*tke*r1b%*cu
DATABASE_BACKEND=postgres

# mysql db setup
MYSQL_DATABASE=cfeblog-m-db
MYSQL_USER=cfeblog-m-user
MYSQL_PASSWORD=RaSNF5H3ElCbDrGUGpdRSEx-IuDzkeHFL_S_QBuH5tk
MYSQL_ROOT_PASSWORD=2mLTcmdPzU2LOa0TpAlLPoNf1XtIKsKvNn5WBiszczs
MYSQL_TCP_PORT=3007
MYSQL_HOST=127.0.0.1

# postgres db setup
POSTGRES_DB=cfeblog-p-db
POSTGRES_USER=cfeblog-m-user
POSTGRES_PASSWORD=NwgFCimzL0Oqd539EYzsztY04uzw2jaVEIrH1OK2sz0
POSTGRES_PORT=5431
POSTGRES_HOST=localhost

To generate secrets use one of the following method(s):

Use Django to create a one-off secret key (bookmark this blog post):
python -c 'from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())'

This is the recommended method for creating the DJANGO_SECRET_KEY

Use Python to create a url safe secret:
python -c "import secrets;print(secrets.token_urlsafe(32))"

Step 6: Local Development with Docker Compose

Running our local environment with the same type of database as our production database is critical. For this, we'll use Docker and Docker Compose.

With Docker, your machine can have a lot of instances of MySQL/Postgres/Redis running with minimal configuration. This is true for macOS, Windows, and nearly all distros of Linux that can run Docker.

Without Docker, having more than 1 version of any of these running is a huge pain. A pain that might be worth going through if you like to bleed from your eyes. It's also an uncessary pain because we're talking about the development environment.

Now on to the nitty gritty.

In our docker-compose.yaml file, you'll see configuration for the services:

  • mysql_db
  • postgres_db
  • redis_db

But wait, there is not a web service for Django in docker-compose.yaml... why not? Two reasons:

  • If you need it, you can add it.
  • If you're new to Python, Virtual Environments, Django, Docker, VSCode, Git, or whatever it makes things even more complex.

If you're new to Docker compose, this might suck too. Sorry about that. But I hope you trust me that, in this case, the juice is worth the squeeze (aka it's worth the effort in learning how to use it).

Since I wanted to support both mysql and postgres I wanted to make use of Docker Compose's profiles feature.

Basicaly, you can use a profile to "activate" different services within a Docker compose file (instead of having a bunch of different Docker compose files).

In our case, docker-compose.yaml has three profiles:

  • mysql (includes the mysql_db and redis_db services)
  • postgres (includes the postgres_db and redis_db services)
  • redis (runs only the redis_db service)

To run any given profile you just do:

docker compose --profile mysql up

Just replace --profile postgres if you want to use that one.

Also, keep in mind that some systems require you to use docker-compose instead of docker compose.

I recommend running this profile in background mode (aka detached mode):

docker compose --profile mysql up -d

Again, just replace --profile postgres if you want to use that one.

Owner
Coding For Entrepreneurs
Build real projects and learn to code. Step by step. By @jmitchel3
Coding For Entrepreneurs
User Authentication In Django/Ajax/Jquery

User Authentication In Django/Ajax/Jquery Demo: Authentication System Using Django/Ajax/Jquery Demo: Authentication System Using Django Overview The D

Suman Raj Khanal 10 Mar 26, 2022
Code coverage measurement for Python

Coverage.py Code coverage testing for Python. Coverage.py measures code coverage, typically during test execution. It uses the code analysis tools and

Ned Batchelder 2.3k Jan 05, 2023
A Minimalistic Modern Django Boilerplate

A Minimalistic Modern Django Boilerplate This boilerplate is mainly for educational purposes. It is meant to be cloned as a starter code for future tu

Jonathan Adly 21 Nov 02, 2022
Django-static-site - A simple content site framework that harnesses the power of Django without the hassle

coltrane A simple content site framework that harnesses the power of Django with

Adam Hill 57 Dec 06, 2022
Django + NextJS + Tailwind Boilerplate

django + NextJS + Tailwind Boilerplate About A Django project boilerplate/templa

Shayan Debroy 3 Mar 11, 2022
Dynamic, database-driven Django forms

Django Dataforms django-dataforms is a wrapper for the Django forms API that lets you dynamically define forms in a database, rather than hard-coding

35 Dec 16, 2022
Probably the best abstract model / admin for your tree based stuff.

django-treenode Probably the best abstract model / admin for your tree based stuff. Features Fast - get ancestors, children, descendants, parent, root

Fabio Caccamo 360 Jan 05, 2023
Bootstrap 3 integration with Django.

django-bootstrap3 Bootstrap 3 integration for Django. Goal The goal of this project is to seamlessly blend Django and Bootstrap 3. Want to use Bootstr

Zostera B.V. 2.3k Jan 02, 2023
A Powerful HTML white space remover for Django

HTML Whitespace remover for Django Introduction : A powerful tool to optimize Django rendered templates Why use "django_stip_whitespace" ? Adds line b

3 Jan 01, 2022
Pipeline is an asset packaging library for Django.

Pipeline Pipeline is an asset packaging library for Django, providing both CSS and JavaScript concatenation and compression, built-in JavaScript templ

Jazzband 1.4k Jan 03, 2023
A Django app for working with BTCPayServer

btcpay-django A Django app for working with BTCPayServer Installation pip install btcpay-django Developers Release To cut a release, run bumpversion,

Crawford 3 Nov 20, 2022
Twitter Bootstrap for Django Form - A simple Django template tag to work with Bootstrap

Twitter Bootstrap for Django Form - A simple Django template tag to work with Bootstrap

tzangms 557 Oct 19, 2022
Utilities for implementing a modified pre-order traversal tree in django.

django-mptt Utilities for implementing Modified Preorder Tree Traversal with your Django Models and working with trees of Model instances. Project hom

2.7k Jan 01, 2023
A music recommendation REST API which makes a machine learning algorithm work with the Django REST Framework

music-recommender-rest-api A music recommendation REST API which makes a machine learning algorithm work with the Django REST Framework How it works T

The Reaper 1 Sep 28, 2021
Official Python agent for the Elastic APM

elastic-apm -- Elastic APM agent for Python This is the official Python module for Elastic APM. It provides full out-of-the-box support for many of th

elastic 369 Jan 05, 2023
Wrapping Raml around Django rest-api's

Ramlwrap is a toolkit for Django which allows a combination of rapid server prototyping as well as enforcement of API definition from the RAML api. R

Jmons 8 Dec 27, 2021
Django API without Django REST framework.

Django API without DRF This is a API project made with Django, and without Django REST framework. This project was done with: Python 3.9.8 Django 3.2.

Regis Santos 3 Jan 19, 2022
Fully reponsive Chat Application built with django, javascript, materialUi, bootstrap4, html and css.

Chat app (Full Stack Frameworks with Django Project) Fully reponsive Chat Application built with django, javascript, materialUi, bootstrap4, html and

1 Jan 19, 2022
Django Federated Login provides an authentication bridge between Django projects and OpenID-enabled identity providers.

Django Federated Login Django Federated Login provides an authentication bridge between Django projects and OpenID-enabled identity providers. The bri

Bouke Haarsma 18 Dec 29, 2020
Django React Flight Rezervation

Django Intro & Installation python -m venv venv source ./venv/Scripts/activate pip install Django pip install djangorestframework pip install python-d

HILMI SARIOGLU 2 May 26, 2022