24 July 2020
by
Ján Vorčák
Slack Tutorial Part 2 - Setting up Django and Heroku deployment v2
Slack
Django
Heroku
In this part of the tutorial, we will set up a Django application.
You can check out the repository's tag:
milestone-1
to see the result. At the end of this tutorial, we will have a Django application setup and deployed on Heroku.Setting up Django
- Install Django with it's CLI (
pip3 install Django
), create new Django projectdjango-admin startproject teamwork
,cd teamwork
, initialize git (git init
) pipenv install && pipenv shell
Let's activate the pipenv environment. Read more about pipenv here.pipenv install django gunicorn django-heroku
Install Django and other dependencies. This should modifyPipenv
andPipenv.lock
files.
Your folder structure should now look like this
1(teamwork) ➜ teamwork git:(master) ✗ tree
2.
3├── Pipfile
4├── Pipfile.lock
5├── manage.py
6└── teamwork
7 ├── __init__.py
8 ├── asgi.py
9 ├── settings.py
10 ├── urls.py
11 └── wsgi.py
12
131 directory, 8 files
If you try to run
pipenv run ./manage.py runserver
- you should see the application running at http://127.0.0.1:8000/, please ignore the warning about unapplied migrations.Do you need a reliable partner in tech for your next project?
Let's configure Heroku!
Heroku is awesome because with it's
django-heroku
package, in just a couple of lines, it will configure the simple Django deployment including the database.- Let's create a Heroku project.
a) Create a project
b) Select your preferred region
c) Link with Github
- We need to create a
Procfile
in our root directory to let Heroku know how to serve our Django app.
It's content should look like this
1web: gunicorn teamwork.wsgi
Also, add the following import statement to the top of settings.py:
import django_heroku
add the following statement to the bottom of settings.py:
1# Activate Django-Heroku.
2django_heroku.settings(locals())
Source: https://devcenter.heroku.com/articles/django-app-configuration
- Push everything to
git
and deploy from Heroku console
Congrats, your app should now be deployed! 🎉
Setting up a custom user
Quote from an official Django's documentation says
When you start your project with a custom user model, stop to consider if this is the right choice for your project.
It's absolutely recommended to configure a custom user model at the beginning of your project. You can read more about why here.
pipenv run ./manage.py startapp core
- this will create an application with namecore
- Add
core
string toINSTALLED_APPS
in yoursettings.py
- Create CustomUser class in
core/models.py
1from django.contrib.auth.models import AbstractUser 2 3 4class User(AbstractUser): 5 def __str__(self): 6 return self.username
- And specify
AUTH_USER_MODEL = 'core.User'
in yoursettings.py
Database configuration
- One more thing though. Heroku automatically created a db and attached it to your deployment. If you want to work with this database remotely, you need to pass
DATABASE_URL
to your process (or differently set it for Django). - Open Heroku, go to Settings > Config Vars > Reveal Config Vars
- You'll find a Postgres URL as
DATABASE_URL
. You can copy this value and pass it to your commands like thisDATABASE_URL=<value> pipenv ./manage.py <cmd>
or optionally set it in your environment. - Now, make sure you apply migrations to this database.
DATABASE_URL="postgres://...." pipenv run ./manage.py makemigrations && pipenv run ./manage.py migrate
- For the sake of readability, we will omit passing
DATABASE_URL
in this tutorial and expect you to pass the correct value.
Let’s stay connected
Do you want the latest and greatest from our blog straight to your inbox? Chuck us your email address and get informed.
You can unsubscribe any time. For more details, review our privacy policy