Back End Web Development Skills

The objective of this page is to give additional context relating to the skills I have within the domain of back-end development.
Python Code
  • Python
  • Back End Web Development, Data Science, Scripting

I have been learning Python since May 2018. Having studied many books and video courses and built a variety of projects using the skills learned, I have used Python for OS scripting, web development and data analysis/visualisation tool.

I have used a variety of libraries within the Python and Anaconda ecosystem and have an extensive knowledge of the extended standard library. Amongst many others, I have a good working knowledge of libraries such as itertools, functools, and collections.

Although the need for some of the tools within these libraries is not always required, it's useful to know for when you would like to build more efficient code or a standard data structure just doesn't give you the required functionality.

There are also examples of using these non-standard data structures within the Countdown Letters and Countdown Numbers apps.

I also have a good working knowledge of some of Python's common libraries such as Requests and Beautiful Soup .

  • Django / Django REST Framework
  • Web Development

Having developed several projects in Django including the whole of the portfolio that you're currently reviewing, I have developed significant skills with it.

Although nowadays I have starter projects to kickstart quickly, I can efficiently build a site from scratch using Django and overcome many of the obstacles in Django that the community considers to be advanced usage. Examples include:

  • Creation of a custom authentication system subclassing from either AbstractUser or AbstractBaseUser.
  • Use and configure Django-allauth which is the de facto standard for any projects that uses something other than Django’s default username/password authentication pattern.
  • The use of Celery/Redis to run many complex automated scheduled tasks.
  • Know the class-based views API extremely well including the use of higher-level classes to abstract logic for subsequent child views. In my opinion, this makes the views more reusable and extensible. Included within this, I also know how to include multiple forms per web page or process multiple forms within a single class based view. I understand advanced concepts such as inheritance including multiple inheritance and MRO.
  • Advanced configuration of Django models including the use of constraints, metadata, managers, instance and class methods.
  • Advanced form design and features such as front-end JavaScript validation feedback in addition to server-side checks and message rendering. Building of forms using ordinary Django forms, Crispy Forms, Django Widget Tweaks, or integrating raw Boostrap HTML.
  • Efficient querying of the database using the ORM. This includes setting up model managers throughout the project to retrieve related objects efficiently and reuse common querysets throughout.
  • Creation of custom mixins to simplify views logic with repitition.
  • Creation of custom Django management commands.
  • Consume an external API or scrape content from the web and store that data within the database. If necessary, also cleaning and manipulating the data.
  • Set up and use context processors for global context variables saving the get_context_data method from being overridden many times.
  • Build a highly customised admin interface that could essentially be a fast prototype of an application. This includes amendments to widget sizes, an overridden HTML template and CSS amendments.

  • pytest
  • Web Development, testing

I have used pytest exclusively as my testing framework of choice. I see very little reason to be using Python's built-in testing framework since the pytest API, community, and plugin ecosystem is so good.

In addition to standard pytest, I have a good working knowledge of pytest-django, coverage, some mocking libraries such as factoryboy and mixer, and an evolving knowledge of hypothesis.

I would love to improve my knowledge of hypothesis more as I can see how extremely powerful it can be.

Within this portfolio project, you can see many examples of testing of models, views, urls, and forms. Somewhat controversially, I also test the project's settings. To me, this seems like a sensible thing to do, although I appreciate many others disagree.

If you, or someone else on the team, changes a project setting which is imperative for the project to function correctly, they may not be aware of the breaking change. It might not even show up in the running of an extensive test suite. Some of the project's settings are in place for the front-end to function correctly. If there is a failing test for a setting, it at least prompts the question, "are you sure this project will continue to function as expected by changing this setting?" If the programmer is sure, they can always just change the test.

In addition, and certainly where I have control of an external site's 404 breakages, I test links to external websites. I learned this after a large restructuring exercise where I grouped apps into an 'apps' directory and ended up breaking a lot of the external links which should have enabled the user to navigate to the relevant source code page.

  • PostgreSQL
  • Database Design, Management & Data Retrieval

I use PostgreSQL as the database of choice with all of my Django projects.

Some of the tasks that I can complete with PostgreSQL or Django/PostgreSQL:

  • Kickstart a project using PostgreSQL rather than using SQLite3. This is achieved using an automated shell script built into a docker-compose routine that automates the process of setting up and securing a new database with securely stored environment variables.
  • Use Postgres to enable the secure access to a multi-tenanted application in an automated way.
  • Use custom search vectors and indexes specific to Postgres through the integration of the django.contrib.postgres app specific features.
  • Check data migrations or inspect the DB when migrations go awry using a combination of Django admin commands, Postgres' CLI, and DataGrip.
  • Configure Docker to use Postgres for in-memory testing of the Django DB using pytest and its extended ecosystem.

Browse other skills...