Because I feel much more comfortable in a terminal than on the Windows command line (or in Powershell), I’ve really been enjoying Windows Subsystem for Linux (WSL). In fact, I use it almost exclusively for accessing the server I run this blog from. WSL is essentially a Linux VM of only a terminal shell in Windows (with no GUI access to Linux) and no lag (like you get in most VMs).

When I created my Grocery List Flask App, I began by using WSL. However, I ran into an issue that prevented me from seeing a locally hosted version of the API in Windows, so I switched to the Windows command line for that app.

Recently, I’ve been developing a Django application (more on that in a future post), and I ran into a similar issue. Between posting the issue with localhost on WSL and starting this new app, there was a response that I had been meaning to check out. I found that for Django and PostgreSQL, making sure everything was running from localhost (or 0.0.0.0) instead of 127.0.0.x, seemed to fix any issues I had. PSQL gave me some issues just running within WSL, but I found that I just need to add ‘-h localhost’ to get it to run.

Below are the commands I used to get Conda, Django, and PSQL all set up on my PC and then again my laptop. This works for Django 2.0, PSQL 9.5, and Conda 4.5.9.

Installation Instructions

Edit: I originally had installation instructions in here for PSQL 9.5. If you want 9.5 in Ubuntu, good news! You already have it. To install the newest version of PSQL, you should uninstall that version first, then install the new version from here

Install Conda (need to restart after installing for it to recognize ‘conda’ commands)

#create environment
conda create --name NameOfEnvironment
#activate environment
source/conda activate NameOfEnvironment
#install Django
conda install -c anaconda django
#install psycopg2, to interface with PSQL
conda install -c anaconda psycopg2

If you get ‘permission denied’, or it hangs, just rerun the install command that failed. Not sure why, but that fixed things for me.

#Remove PSQL from Ubuntu:
sudo apt-get --purge remove postgresql\*
#Then run this to make sure you didn’t miss any:
dpkg -l | grep postgres

#Install PSQL 10 using instructions here: https://www.postgresql.org/download/linux/ubuntu/ I have copied them here for convenience, but please double check that they have not changed
#Create the file /etc/apt/sources.list.d/pgdg.list and add the following line:
#deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main

#Then exeucte the following three commands
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get install postgresql-10

sudo service postgresql start    
sudo -i -u postgres -h localhost
createuser --interactive
	   psql user: local_user
	   y to superuser

#create the database
createdb local_db
#log into local_db
psql -d local_db

#privileges for Django to modify tables.
GRANT ALL PRIVILEGES ON DATABASE local_db TO local_user;

ALTER USER local_user WITH PASSWORD 'password';

'\q' to quit interactive console.
'exit' to leave postgres as postgres user.

#one line command to log in as the user to check tables during development.
psql -h localhost -d local_db -U local_user

python manage.py makemigrations
python manage.py migrate

Now log back in to PSQL using the line above, then enter '\dt' and you should see tables like django_admin_log, django_content_type, django_migrations, and django_sessions. Your PSQL DB is now connected to your Django app!

#optional for now, but allows you to ensure db connection works by storing credentials for the superuser you create.
python manage.py createsuperuser

#command to run the server. go to localhost:8000 in your web browser to view!
python manage.py runserver 0.0.0.0:8000

I used this post for reference