I have been meaning to build my skills in some areas for quite some time, Python, traditional backend frameworks and a bit of full-stack development being a few of them. I decided on building a simple weight-tracking website to learn these things. It had been tossing about in my head for a lot of time, and finally I decided to sit down and start coding it today.
Day 1 Challenge 1
The first thing to do was to create a directory to store all the code in. Here was the first roadblock I hit, what should the project be named. After contemplating and thinking a lot on it (read 3 minutes max) I decided to go with "Wracker" as it could be seen as a short for "Weight Tracker" and also it is a pun on the word "Wrecker" which I just found hilarious.
Day 1 Challenge Virtual
Up next was me wanting to install the dependencies for the project without them muddying up my system-wide python packages. I knew of virtualenv
and have banged my head enough in the past that it only took me 3 tries before I had it nailed down.
Day 1 Challenging Structure
Since I wanted to use Django framework for this project and I haven't ever used it before, I went to their official getting started guide and was left with a file structure looking something like this after initialising my project.
- Projects
|- wracker
|- .gitignore
|- wracker
|- manage.py
|- wracker
|- __init.py__
|- asgi.py
|- settings.py
|- urls.py
|- wsgi.py
Here I tried running the commands from getting started guide inside a pre-made directory for my project. I could not understand why it needs to create 2 separate subdirectories named the same as the project. This is something I tried understanding multiple times during the day, and we'll back come to it later.
Challenge Post the SQLite
Django by default uses an SQLite database for storing data, but I wanted to use Postgres. I had already setup a docker-compose.yaml
file to provision me a postgres database running inside a docker container. While initially the configuration part in Django for Postgres was a bit confusing, I was able to get it working after a bit of fitting in multiple pieces together. I also learned how to use environment variables in Python while dealing with this.
Challenge of Looking Good
I also wanted a code-formatter for Python and had heard about this one called black
. Went to the official website, learnt how to use it and then integrate it locally with wracker.
Challenge of the Day
After looking at all this I would give "Challenge of the Day" award only to the project structure. While none of the official documentation clearly call it out that you need to pass in .
as the directory to your django-admin startproject
I did find an article online that clarified it.
Things I learned/solidified today
- Using
virtualenv
to keep dependencies separate in Python - How to export your dependencies as a
requirements.txt
file - Usage of environment variables in Python
- How to create a Django project with reasonable directory structure
- Formatting python code using
black
- Integrating PostgreSQL with Django instead of the default SQLite database