Een web framework is een codebibliotheek die webontwikkeling sneller en eenvoudiger maakt door gemeenschappelijke patronen te bieden voor het bouwen van betrouwbare, schaalbare en onderhoudbare webapplicaties. Na het begin van de jaren 2000 maken professionele webontwikkelingsprojecten altijd gebruik van een bestaand webframework, behalve in zeer ongebruikelijke situaties.
Waarom zijn webframeworks nuttig?
Webframeworks kapselen in wat ontwikkelaars de afgelopen twintig jaar hebben geleerd tijdens het programmeren van sites en applicaties voor het web. Raamwerken maken het makkelijker om code voor veelvoorkomende HTTP-bewerkingen te hergebruiken en om projecten zo te structureren dat andere ontwikkelaars met kennis van het raamwerk de applicatie snel kunnen bouwen en onderhouden.
Gemeenschappelijke webframefunctionaliteit
Frameworks bieden functionaliteit in hun code of via uitbreidingen om gemeenschappelijke bewerkingen uit te voeren die nodig zijn om webtoepassingen te laten draaien. Deze gemeenschappelijke operaties omvatten:
- URL-routering
- Behandeling en validatie van invoerformulieren
- HTML, XML, JSON en andere uitvoerformaten met een templating engine
- Configuratie van databaseverbindingen en persistente gegevensmanipulatie via een object-relational mapper (ORM)
- Beveiliging van het web tegen Cross-site request forgery (CSRF), SQL Injection, Cross-site Scripting (XSS) en andere veel voorkomende kwaadaardige aanvallen
- Session storage and retrieval
Niet alle webframeworks bevatten code voor alle bovenstaande functionaliteit.Frameworks bevinden zich in het spectrum van het uitvoeren van een enkele use-case tot het aanbieden van elke bekende web framework functie aan elke ontwikkelaar. Sommige frameworks kiezen voor de “batteries-included” benadering waarbij alles wat mogelijk is gebundeld wordt met het framework, terwijl anderen een minimaal kernpakket hebben dat geschikt is voor uitbreidingen die door andere packages worden geleverd.
Het Django web application framework bevat bijvoorbeeld de Django ORM laag die een ontwikkelaar in staat stelt om relationele databaseread, write, query, en delete operaties in Python code te schrijven in plaats van SQL.Django’s ORM kan echter niet zonder significante aanpassing werken op niet-relationele (NoSQL) databases zoals MongoDB of Cassandra.
Sommige andere webframeworks, zoals Flask en Pyramid, zijn eenvoudiger te gebruiken met niet-relationele databases door externe Python-bibliotheken op te nemen.Er is een spectrum tussen minimale functionaliteit met gemakkelijke uitbreidbaarheid aan de ene kant en alles opnemen in het framework met strakke integratie aan de andere kant.
Moet ik een webframework gebruiken?
Hoewel of niet u een webframework gebruikt in uw project hangt af van uw ervaring met webontwikkeling en wat u probeert te bereiken. Als je een beginnende programmeur bent en alleen aan een webapplicatie wilt werken als leerproject, dan kan een framework je helpen de hierboven genoemde concepten te begrijpen, zoals URL routing, datamanipulatie en authenticatie, die gebruikelijk zijn voor de meeste webapplicaties.
Aan de andere kant, als je een ervaren programmeur bent met veel ervaring in webontwikkeling, kun je het gevoel hebben dat de bestaande frameworks niet voldoen aan de eisen van je project. In dat geval kun je open source bibliotheken, zoals Werkzeug voorWSGI plumbing, mixen en matchen met je eigen code om je eigen framework te maken. Er is nog genoeg ruimte in het Python-ecosysteem voor nieuwe frameworks om te voldoen aan de behoeften van webontwikkelaars die niet worden vervuld door Django, Flask, Pyramid, Bottle en vele anderen.
Kortom, of je wel of niet een webframework moet gebruiken om een webapplicatie te bouwen, hangt af van je ervaring en wat je probeert te bereiken.Het gebruik van een web framework voor het bouwen van een webapplicatie is zeker niet verplicht, maar het maakt het leven van de meeste ontwikkelaars in veel gevallen wel makkelijker.
Vergelijking van web frameworks
Talk Python to Me had een podcast aflevering met een gedetailleerde vergelijking van de Django,Flask, Tornado en Pyramid frameworks.
Ben je benieuwd hoe de code in een Django project is gestructureerd in vergelijking met Flask? Bekijk dan deze Django web application tutorial en bekijk vervolgens dezelfde applicatie gebouwd met Flask.
Er is ook een repository genaamdcompare-python-web-frameworks waar dezelfde webapplicatie wordt gecodeerd met verschillende Python webframeworks, templating engines en object-relational mappers.
Bronnen voor webframeworks
-
Building Your Own Python Web Framework is een geweldige manier om te leren hoe WSGI werkt en de vele andere onderdelen die samen webframeworks nuttig maken voor webontwikkelaars.
-
12 verzoeken per seconde onderzoekt hoe het traditioneel synchrone webframework Flask zich verhoudt tot een async-framework als Sanic in een kunstmatige, eenvoudige benchmark. De resultaten lijken erop dat Sanic veel sneller is dan Flask, maar zodra je zelfs maar een basishoeveelheid functionaliteit aan een project toevoegt, inclusief databasel queries en templating, lopen de resultaten gelijk op. Miguel Grinberg heeft ook een artikel geschreven waarin hij de lezers vraagt om alle webprestatiebenchmarks te negeren, inclusief deze.
-
Wanneer je leert hoe je een of meer webframeworks moet gebruiken, is het handig om een idee te hebben van wat de code onder de dekens doet. Dit artikel over het bouwen van een eenvoudig Python-raamwerk vanaf nul laat zien hoe HTTP-verbindingen, routing en verzoeken kunnen werken in slechts 320 regels code. Deze post is geweldig, ook al is het resulterende framework een vereenvoudiging van wat frameworks als Django, Flask en Pyramid ontwikkelaars laten doen.
-
Er is ook een andere, meer recente, meerdelige tutorial over het bouwen van je eigen webframework in Python. Deze serie is gebaseerd op hetalcazar-project dat de auteur aan het coderen is voor leerdoeleinden:
- Deel 1: Verzoeken afhandelen
- Deel 2: Routes, Class-Based Handlers en Unit Testing
- Deel 3: Test Client and Templating Support
- Part 4: Exception Handling, Static Files and Middleware
-
Check out the answer to the”What is a web framework and how does it compare to LAMP?”question on Stack Overflow.
-
Another great series that digs behind the web framework magic is”Web Application from Scratch”. The four parts are:
- Part 1: handling HTTP requests and responses
- Part 2: abstracting Requests, Responses and Servers
- Part 3: request handlers and middleware
- Part 4: abstracting applications
-
Frameworks is a really well done short videothat explains how to choose between web frameworks. The author has someparticular opinions about what should be in a framework. For the most partI agree although I’ve found sessions and database ORMs to be a helpfulpart of a framework when done well.
-
Django vs Flask vs Pyramid: Choosing a Python Web Framework bevat achtergrondinformatie en codevergelijkingen voor vergelijkbare webapplicaties die in deze drie grote Python-frameworks zijn gebouwd.
-
In deze fascinerende blogpost wordt de complexiteit van de code van verschillende Python-webframeworks bekeken aan de hand van visualisaties op basis van hun codebases.
-
De benchmark van Python’s webframeworks is een test van de responsiviteit van een framework met het coderen van een object naar JSON en het retourneren van dit object als respons, evenals het ophalen van gegevens uit de database en het renderen hiervan in een sjabloon.
-
Welke webframeworks gebruiken jullie en waarom zijn ze geweldig? is een taalonafhankelijke Reddit-discussie over webframeworks. Het is interessant om te zien wat programmeurs in andere talen wel en niet goed vinden aan hun eigen webframeworks in vergelijking met de belangrijkste Python-frameworks.
-
Deze door gebruikers gestelde vraag & antwoordsite vroeg “Wat zijn de beste algemeen bruikbare Python-webframeworks die in productie kunnen worden gebruikt?”.De stemmen zijn niet zo belangrijk als de lijst met de vele frameworks die beschikbaar zijn voor Python-ontwikkelaars.
-
Django vs. Flask in 2019: Which Framework to Choos bekijkt de beste gebruikssituaties voor Django en Flask en wat hen uniek maakt, vanuit het oogpunt van onderwijs en ontwikkeling.
-
11 nieuwe Python-webframeworks heeft een korte beschrijving van een aantal nieuwere frameworks die nog in opkomst zijn, zoals Sanic, Masonite en Molten.
Webframeworks leren checklist
-
Kies een belangrijk Python-webframework (Django of Flask worden aanbevolen) en blijf daarbij. Als je net begint, kun je het beste eerst één framework leren in plaats van rond te stuiteren en te proberen elk framework te begrijpen.
-
Work through a detailed tutorial found within the resources links on theframework’s page.
-
Study open source examples built with your framework of choice so you cantake parts of those projects and reuse the code in your application.
-
Build the first simple iteration of your web application then go tothe deployment section to make it accessible on theweb.