Python: batteries included

Python en django

Auteur: Roel van Os

Python is afkomstig uit de academische wereld, maar wordt momenteel voor veel meer doelen gebruikt. Volgens de TIOBE-index is Python de populairste programmeertaal na Java, C en C++.

Python is een geïnterpreteerde programmeertaal. Programmacode compileert naar bytecode, die in een eenvoudige virtuele machine wordt uitgevoerd. De taal gebruikt dynamische typering (zoals JavaScript en PHP) en heeft net als Java automatisch geheugenbeheer. Het is standaard aanwezig op alle Linux-distributies en macOS, en is onder Windows eenvoudig te installeren.

Het doel van de Python syntax is om zo leesbaar mogelijk te zijn, door het zoveel mogelijk vermijden van leestekens zoals haakjes en accolades. Soms lezen stukken Python bijna als pseudocode! Eén van de meest in het oog springende eigenschappen is het feit dat het inspringen van code de enige manier is om blokken code af te bakenen. Waar je in de meeste andere talen accolades gebruikt om een blok code aan te geven, gebeurt dit in Python door een control statement met : en inspringen:

Hoewel sommigen dit een reden vinden om Python niet te gebruiken, heb je er in mijn ervaring in de praktijk geen last, en juist profijt van. Verdere eigenschappen van de taal:

  • eenvoudig klassesysteem met multiple inheritance. Het werken met klassen is niet verplicht zoals in Java.
  • een aantal zaken die we van Java kennen: exceptions, annotaties, lamda’s;
  • een aantal zaken die we van C++ kennen: operator overloading en de genoemde multiple inheritance;
  • standaard datatypes: lijsten, sets, dictionaries (maps) en tuples (niet-wijzigbare lijsten). Tuples zijn bijvoorbeeld handig voor het teruggeven van meerdere returnwaarden vanuit een functie.

Verder beschikt het over een uitgebreide standaardbibliotheek. Daarnaast zijn er veel “third-party” extensies (packages), met daarbij ook veel wrappers voor bestaande C en C++-bibliotheken.

Dit alles maakt Python bij uitstek geschikt voor het integreren van componenten die in verschillende programmeertalen geschreven zijn. Ook wordt het gebruikt voor het kunnen schrijven van plugins, bijvoorbeeld in Sublime Text. Ook als backend voor web-applicaties is het prima inzetbaar. Er is veel keuze uit web-frameworks, object-relational mappers, templating engines, etc. Python wordt ook veel gebruikt in artificial intelligence; het is de standaardprogrammeertaal voor de Raspberry Pi.

Een aantal nadelen van Python:

  • Doordat de taal geen verplichte type-aanduidingen gebruikt, is het onderhoud van grotere applicaties lastiger. In nieuwere versies kan je optioneel type-hints geven. Die worden niet door de interpreter gecontroleerd, maar kunnen je IDE wel helpen bij het geven van suggesties.
  • De taal rekent niet erg snel. Vanwege architecturele keuzes schaalt het bovendien niet goed met threads. In de praktijk wordt er daarom overwegend met processen geschaald.
  • De overstap van Python 2 naar Python 3 is niet erg soepel verlopen, vanwege het gebrek aan backwards compatibility.

Veelgebruikte tooling voor het ontwikkelen in Python:

  • IntelliJ met de Python plugin (of PyCharm) biedt autocompletion, automatische imports en controleren van types (bijv. heeft een object een bepaalde methode of eigenschap?).
  • Voor Eclipse-gebruikers is er PyDev.
  • Visual Studio Code heeft een goede Python plugin. Deze wordt inmiddels door Microsoft onderhouden.

Django: The Web framework for perfectionists with deadlines

Python en het Django web framework is een combinatie die in de praktijk veel voorkomt. Met Django kan je in zeer korte tijd web-based applicaties bouwen. Dit kunnen zowel server-side gerenderde applicaties op basis van templates zijn, als REST backends voor bijvoorbeeld single-page JavaScript-apps.

Django vult Python aan met het volgende:

  • een model/view/template framework: opslag en structurering van data in models, manipulatie en transformatie van de data in views en presentatie van de data in templates;
  • ingebouwde admin-interface voor het uitvoeren van basale CRUD-operaties op de modellen;
  • standaard aanwezig authenticatie van gebruikers en het toekennen van rechten;
  • object-relationele mapper met ondersteuning voor een groot aantal databases, zowel open-source (MySQL als PostgreSQL) als commercieel (Oracle);
  • schemamigraties (ALTER TABLE): in veel gevallen kan Django deze automatisch voor je genereren;
  • uitstekende documentatie en goed leesbare broncode.

Django is redelijk “opinionated”: het schrijft een standaard-layout voor models, views en templates voor. De ORM en templating engines zijn in Django ook niet vervangbaar door andere implementaties. De kracht is juist dat elke Django-applicatie op dezelfde manier werkt.

Net als bij Python zijn er voor Django vele modules van derden die functionaliteit toevoegen:

  • Het Django REST framework tovert Django om tot een REST backend;
  • Met de Django SAML2 module kan je de authenticatie in je applicatie uitbesteden (single-sign on).

We zien bij onze klanten meerdere toepassingen van de taal. Het wordt gebruikt om webportalen te bouwen en om koppelingen tussen meerdere systemen te maken. Daarnaast is het mogelijk om snel proof of concepts te maken met weinig code.

Voorbeelden van websites op basis van Django (en dus ook Python):

 

Auteur: Roel van Os