Terug naar blog

Django-modellen maken: een tutorial

Django-modellen maken: een tutorial

Django is een bekend webframework voor de snelle ontwikkeling van veilige en onderhoudbare websites en webapps. Gebouwd met Python, vereenvoudigt Django webontwikkeling, waardoor er meer tijd en focus is voor het schrijven van apps zonder telkens het wiel opnieuw uit te hoeven vinden. Django is een gratis en open-source project met robuuste officiële documentatie, geweldige community-ondersteuning en tal van gratis en betaalde ondersteuning.

In deze gids duiken we in het maken van Django-modellen. In Django is een model de belangrijkste bron van informatie over uw gegevens. Modellen beschrijven de velden en het gedrag van de op te slaan gegevens. Django gebruikt het model om de databasetabellen te genereren met behulp van ORM (Object Relational Mapping), ook wel modellen genoemd.

Vereisten

We werken op een op Unix gebaseerd besturingssysteem, bij voorkeur een Ubuntu 20.04 cloudserver als het systeem waarop we hebben getest. Als u Django op een vergelijkbare omgeving wilt instellen, raadpleeg dan onze handleiding, “Hoe Django te installeren en een ontwikkelomgeving in te richten op Ubuntu 20.04.”

Stap 1. Python-ontwikkelomgeving

Django is gebouwd op Python. We hebben dus een robuuste Python-ontwikkelomgeving nodig met alle benodigde tools om met Python-apps te werken. We hebben dit al besproken in een speciale gids. Hier geven we een korte demonstratie.

Start eerst een terminal en voer de volgende commando's uit:

Installeer vervolgens pip – de Python-pakketbeheerder:

Installeer vervolgens enkele aanvullende ontwikkelingspakketten:

Django Models 1

Om een virtuele omgeving op te zetten, hebben we ook de Python-venv-module nodig:

Stap 2. MySQL-server installeren

MySQL is een populair relationeel databasebeheersysteem. Het is open-source, stadiel en rijk aan functies. We gebruiken MySQL als de databaseserver voor onze Django-app. Installeer MySQL met behulp van APT:

Controleer vervolgens de installatie:

Django Models 2

Dit is slechts een basisinstallatie van MySQL met standaardopties. Bekijk de meer diepgaande gids over MySQL-installatie en -configuratie.

Stap 3. De Django-app instellen

We zijn nu klaar om onze Django-app te maken. Als u geïnteresseerd bent in een verdere diepgaande demonstratie van Django, raadpleeg dan onze handleiding, “Het Django-webframework installeren op Ubuntu 20.04.”

Maak vervolgens een speciale map aan voor de app. De mapnaam moet de projectnaam weerspiegelen:

Maak binnen de projectmap een virtuele Python-omgeving aan met behulp van de venv-module:

Activeer de virtuele omgeving:

Django Models 3

Installeer Django met behulp van pip:

Maak vervolgens een nieuw Django-project aan met behulp van het django-admin-commando:

django-admin

Stap 4. De Django-app configureren

De Django-app bevat alle standaardconfiguraties. Voor ons doel moeten we enkele aanpassingen doen.

Begin met het bewerken van het configuratiebestand settings.py:

Wijzig vervolgens de tijdzone:

TIME_ZONE

Voeg de machines toe die toegang mogen hebben tot de Django-appserver:

ALLOWED_HOSTS

Pas daarna de wijzigingen toe:

Django Models 4

Maak ten slotte een superuser aan voor onze Django-webapp:

python manage.py

Stap 5. Django-app verbinden met MySQL

Om verbinding te maken met MySQL hebben we een extra Python-connectorbibliotheek nodig die compatibel is met Django. We gebruiken mysqlclient.

Zorg er eerst voor dat de benodigde pakketten zijn geïnstalleerd:

python3-dev

Installeer vervolgens mysqlclient:

  • Een specifieke database aanmaken

Voor onze app moeten we een specifieke database en databasegebruiker aanmaken. Start de MySQL-shell als root:

sudo mysql -u rootMaak een specifieke database aan voor onze Django-app:

Maak vervolgens een specifieke databasegebruiker aan voor de Django-app:

Verleen ten slotte de specifieke gebruiker volledige rechten op de specifieke database:

GRANT ALL ON
  • Django-configuratie wijzigen om MySQL te gebruiken

Nu moeten we enkele Django-configuraties aanpassen zodat het MySQL als databaseserver kan gebruiken. Open settings.py in een teksteditor:

Scrol omlaag naar de sectie DATABASES en plak de volgende code:

DATABASES

Bewerk vervolgens het MySQL-configuratiebestand zodat het de benodigde databasegegevens bevat:

Voeg het volgende blok toe aan het einde van het bestand:

Django Models 5

Start MySQL opnieuw op om de wijzigingen door te voeren:

Step 6. Creating a Django Model

We zijn nu klaar om een nieuw model aan te maken binnen ons Django-project. Activeer de virtuele omgeving:

Laat Django op deze locatie een nieuwe app aanmaken:

Na het aanmaken zou de mappenstructuur er ongeveer zo uit moeten zien. Hier zal het bestand models.py de code bevatten voor ons aangepaste Django-model:

Django Models 6

Controleer de huidige inhoud van het bestand:

cat models.py

Ter demonstratie gaan we een model maken voor blogberichten met de naam Post. Het zal de volgende velden bevatten:

  • title: Titel van het blogbericht.
  • slug: Slaat geldige URL's op en genereert deze voor webpagina's.
  • content: De tekst van het blogbericht.
  • created_on: Datum waarop het bericht is aangemaakt.
  • author: De gebruiker die het bericht heeft aangemaakt.

Open het bestand models.py in een teksteditor:

Laten we enkele benodigde API's importeren voor ons model. Standaard importeert het de models-API. We hebben ook de slugify-API nodig voor het genereren van slugs, User voor authenticatie, en reverse voor een betere en flexibelere URL-creatie:

Voeg vervolgens de class-methode genaamd Post toe. Deze zal de benodigde databasevelden bevatten zoals title, slug, content, created_on, and author:

We hebben de functionaliteit nodig voor het genereren van URL's en het opslaan van het bericht. Dit is belangrijk omdat het unieke links genereert die overeenkomen met unieke berichten:

In de volgende sectie vertellen we het model hoe het bericht gesorteerd moet worden en hoe het op de webpagina moet worden weergegeven. We coderen de logica met behulp van een inner class, Meta. Deze zal aanvullende modellogica bevatten die geen betrekking heeft op de definitie van de databasevelden:

Ten slotte hebben we de functionaliteit van het Comment-model in dit bestand. Dit vereist het toevoegen van nog een klasse Comment met behulp van models.Model als signatuur. Deze zal de volgende databasevelden bevatten:

  • name: Naam van de reageerder.
  • email: E-mailadres van de reageerder.
  • text: Inhoud van de reactie zelf.
  • post: Het bericht waarop de reactie is geplaatst.
  • created_on: Tijdstip waarop de reactie is aangemaakt.

De code zal er ongeveer zo uitzien:

Op dit moment zal ons models.py-bestand er zo uitzien:

models.py

Sla ten slotte het bestand op en sluit de editor.

Stap 7. Django-instellingen bijwerken

Het model is gemaakt. We moeten echter enkele configuratiebestanden aanpassen om het model in werking te stellen. In settings.py, moeten we ons model toevoegen onder INSTALLED_APPS.

Open settings.py in een teksteditor:

Registreer de nieuwe module onder de sectie INSTALLED_APPS:

INSTALLED_APPS

Sla het bestand op en sluit de editor.

Stap 8. Wijzigingen migreren

Nu we alle gewenste modellen hebben toegevoegd, is de volgende stap het toepassen van deze wijzigingen. Django zal deze schema's toepassen op onze MySQL-database.

Het volgende commando genereert alle benodigde migratiebestanden. De uitvoer toont de locaties van al die bestanden binnen de projectmap:

makemigrations

Het volgende commando toont een lijst van alle bestaande migraties:

Django Models 6

Let op dat alle migraties zijn gemarkeerd, behalve 0001_initial die is gemaakt als onderdeel van de modellen Post en Comment.

Het volgende commando laat zien welke SQL-query Django zal uitvoeren om de migraties uit te voeren:

sample_app

Het enige wat we nu nog hoeven te doen is de migraties toepassen. Deze migraties zullen de wijzigingen in de database wegschrijven:

migrate

Stap 9. Wijzigingen verifiëren

Om de wijzigingen te verifiëren, nemen we een kijkje in onze MySQL-database. Start de MySQL-shell als de Django-gebruiker:

Wijzig vervolgens de huidige actieve database naar de Django-app-database:

Toon een lijst van alle tabellen in de database:

Gebruik ten slotte de DESCRIBE query:

Django Models 7

Django-beperkingen met MySQL

Wanneer u MySQL gebruikt als de databaseserver voor uw Django-app, zijn er een paar dingen waar u rekening mee moet houden:

  • Er is weinig ondersteuning voor transacties rond schema-wijzigende processen. Dit betekent dat als een migratie mislukt, alle wijzigingen handmatig ongedaan moeten worden gemaakt voordat u een andere migratie probeert. Er is geen manier om terug te rollen naar een eerder moment waarop de mislukte migratie nog niet had plaatsgevonden.
  • Voor de meeste schema-wijzigende processen herschrijft MySQL tabellen volledig. In bepaalde situaties kan dit erg tijdrovend zijn. In het ergste geval is de tijdscomplexiteit evenredig met het aantal toe te voegen rijen of te verwijderen kolommen. Volgens de officiële Django-documentatie kan het één minuut per miljoen rijen duren.
  • MySQL handhaaft een limiet voor het aantal tekens voor de lengte van kolom-, tabel- en indexnamen. Er is ook een limiet op de totale grootte van alle kolommen en indexen. Django kan deze limiet overschrijden. Sommige andere backends dan MySQL kunnen de hogere limiet van Django wel aan.

Daarom wordt het ten zeerste aanbevolen om uw opties af te wegen en de juiste te kiezen.

Laatste overwegingen

Deze handleiding laat succesvol zien hoe u modules toevoegt aan een bestaande Django-app. We hebben MySQL gebruikt als backend voor de app. Het toont ook enkele belangrijke Django-concepten zoals modellen, hoe migratie werkt en hoe Django modellen vertaalt naar MySQL-databasetabellen.

Veel computerplezier!

author

Hark Labs

Auteur · CloudSigma

Preslav Dobrev is een creatief ontwerper bij CloudSigma, met de nadruk op een consistente bedrijfsidentiteit door middel van traditionele en innovatieve marketingkanalen. Hij is bedreven in het samenvoegen van artistieke visie met strategische marketing om impactvolle merkverhalen te creëren.

Reacties

Nog geen reacties. Wees de eerste.