Django + Redis + Postgres
A very vanilla way to build with django, using django and django templates as much as possible.
- The
jstoolchain
folder includes a tailwindcss setup - You should run
npm i
to install the dependencies - There is also a
.xml
file for PyCharm users to make it aFile Watcher
- The
tailwind.config.js
file is configured to search forhtml
andpy
files .py
files because forms.py could have tailwindcss classes due to the user ofcrispy-forms
withcrispy-tailwind
- The project template directory includes a folder called
icons
which contains lucide icons (https://lucide.dev/) - The idea is to use django template tag of include and add the icons to the templates
- Example:
{% include 'icons/arrow-right.svg' %}
- Toasts from https://github.com/talsu/vanilla-toast are included by default
- any view that sends a context with the keys present on
mysite/templates/toast/toast_body.html
will display a toast - Eg: toast_message, toast_error, toast_success
- For example: After some action is complete a session variable can be set and the view can be redirected to the main page that would display the toast. This page should also delete the session variable so that it can never repeat.
- Redis is used as a cache firstly
- Secondly, it is used to run huey tasks
- Thirdly, it is used as a session store
- Compared to running redis on upstash, railway so far seems to be much better. (Needs more testing with multiple projects to be sure)
Initially we used celery however switching to huey ran the tasks reliably and saved around 1.5GB of RAM on the server which would be a better starting point initially as cost could be a factor.
- Huey is used as a task queue (same as celery, but more lightweight)
- It is configured to use Redis as a broker and a result store
- The Huey settings are on the production settings file
- The
tasks.py
file is used to define tasks (similar to celery's tasks.py file) - The decorator
@huey.task
and@huey.periodic_task
are used to define tasks
- We use whitenoise to serve static files
- There is no setting for media files, but cloudinary settings are present as comments in the production settings file
- Don't commit
.env
file, settings will read from railway environment variables - To create a superuser install railway cli and run
railway run python manage.py createsuperuser
- Split into apps as much as possible
- project templates and static folders are inside the project folder rather than outside