Getting Up and Running Locally¶
Setting Up Development Environment¶
Make sure to have the following on your host:
- Python 3.8
- PostgreSQL.
- Redis, if using Celery
- Cookiecutter
First things first.
Create a virtualenv:
$ python3.8 -m venv <virtual env path>
Activate the virtualenv you have just created:
$ source <virtual env path>/bin/activate
Install cookiecutter-django:
$ cookiecutter gh:pydanny/cookiecutter-django
Install development requirements:
$ pip install -r requirements/local.txt $ git init # A git repo is required for pre-commit to install $ pre-commit install .. note:: the `pre-commit` exists in the generated project as default. for the details of `pre-commit`, follow the [site of pre-commit](https://pre-commit.com/).
Create a new PostgreSQL database using createdb:
$ createdb <what you have entered as the project_slug at setup stage> -U postgres --password <password>
Note
if this is the first time a database is created on your machine you might need an initial PostgreSQL set up to allow local connections & set a password for the
postgres
user. The postgres documentation explains the syntax of the config file that you need to change.Set the environment variables for your database(s):
$ export DATABASE_URL=postgres://postgres:<password>@127.0.0.1:5432/<DB name given to createdb> # Optional: set broker URL if using Celery $ export CELERY_BROKER_URL=redis://localhost:6379/0
Note
Check out the Settings page for a comprehensive list of the environments variables.
See also
To help setting up your environment variables, you have a few options:
- create an
.env
file in the root of your project and define all the variables you need in it. Then you just need to haveDJANGO_READ_DOT_ENV_FILE=True
in your machine and all the variables will be read. - Use a local environment manager like direnv
- create an
Apply migrations:
$ python manage.py migrate
If you’re running synchronously, see the application being served through Django development server:
$ python manage.py runserver 0.0.0.0:8000
or if you’re running asynchronously:
$ uvicorn config.asgi:application --host 0.0.0.0 --reload
Setup Email Backend¶
MailHog¶
Note
In order for the project to support MailHog it must have been bootstrapped with use_mailhog
set to y
.
MailHog is used to receive emails during development, it is written in Go and has no external dependencies.
For instance, one of the packages we depend upon, django-allauth
sends verification emails to new users signing up as well as to the existing ones who have not yet verified themselves.
Download the latest MailHog release for your OS.
Rename the build to
MailHog
.Copy the file to the project root.
Make it executable:
$ chmod +x MailHog
Spin up another terminal window and start it there:
./MailHog
Check out http://127.0.0.1:8025/ to see how it goes.
Now you have your own mail server running locally, ready to receive whatever you send it.
Celery¶
If the project is configured to use Celery as a task scheduler then by default tasks are set to run on the main thread
when developing locally. If you have the appropriate setup on your local machine then set the following
in config/settings/local.py
:
CELERY_TASK_ALWAYS_EAGER = False
Sass Compilation & Live Reloading¶
If you’d like to take advantage of live reloading and Sass compilation you can do so with a little bit of preparation, see Sass Compilation & Live Reloading.
Summary¶
Congratulations, you have made it! Keep on reading to unleash full potential of Cookiecutter Django.