> ## Documentation Index
> Fetch the complete documentation index at: https://www.jetify.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Django

> This example demonstrates how to configure and run a Django app using Devbox. It installs Python, PostgreSQL, and uses `pip` to install your Python dependencies in a virtual environment.

[Example Repo](https://github.com/jetify-com/devbox/tree/main/examples/stacks/django)

## How to Use[​](#how-to-use "Direct link to How to Use")

1. Install [Devbox](https://www.jetify.com/docs/devbox/installing-devbox/)
2. Run `devbox shell` to install your packages and run the init\_hook. This will activate your
   virtual environment and install Django.
3. Initialize PostgreSQL with `devbox run initdb`.
4. In the root directory, run `devbox run create_db` to create the database and run your Django
   migrations.
5. In the root directory, run `devbox run server` to start the server. You can access the Django
   example at `localhost:8000`.

## How to Create this Example from Scratch[​](#how-to-create-this-example-from-scratch "Direct link to How to Create this Example from Scratch")

### Setting up the Project[​](#setting-up-the-project "Direct link to Setting up the Project")

1. Install [Devbox](https://www.jetify.com/docs/devbox/installing-devbox/).

2. Run `devbox init` to create a new Devbox project in your directory.

3. Install Python and PostgreSQL with
   `devbox install python python310Packages.pip openssl postgresql`. This will also install the
   Devbox plugins for pip (which sets up your .venv directory) and PostgreSQL.

4. Copy the requirements.txt and `todo_project` directory into the root folder of your project

5. Start a devbox shell with `devbox shell`, then activate your virtual environment and install your
   requirements using the commands below.

   ```bash theme={null}
   . $VENV_DIR/bin/activate
   pip install -r requirements.txt
   ```

   You can also add these lines to your `init_hook` to automatically activate your venv whenever you
   start your shell

### Setting up the Database[​](#setting-up-the-database "Direct link to Setting up the Database")

The Django example uses a Postgres database. To set up the database, we will first create a new
PostgreSQL database cluster, create the `todo_db` and user, and run the Django migrations.

1. Initialize your Postgres database cluster with `devbox run initdb`.

2. Start the Postgres service by running `devbox services start postgres`

3. In your `devbox shell`, create the empty `todo_db` database and user with the following commands.

   ```bash theme={null}
   createdb todo_db
   psql todo_db -c "CREATE USER todo_user WITH PASSWORD 'secretpassword';"
   ```

   You can add this as a devbox script in your `devbox.json` file, so you can replicate the setup on
   other machines.

4. Run the Django migrations to create the tables in your database.

   ```bash theme={null}
   python todo_project/manage.py makemigrations
   python todo_project/manage.py migrate
   ```

Your database is now ready to use. You can add these commands as a script in your `devbox.json` if
you want to automate them for future use. See `create_db` in the projects `devbox.json` for an
example.

### Running the Server[​](#running-the-server "Direct link to Running the Server")

You can now start your Django server by running the following command.

```bash theme={null}
python todo_project/manage.py runserver
```

This should start the development server.

[Edit this page](https://github.com/jetify-com/docs/tree/main/docs/devbox/devbox-examples/stacks/django/index.mdx)
