Wagtail met een aangepast gebruikersmodel

Om Wagtail te combineren met een aangepast gebruikersmodel, moeten beide worden geconfigureerd voordat de database wordt gemigreerd. Aangezien dit de eerste tutorial is van de serie over PythonEatsTail, zullen we vanaf scratch beginnen.

27 juni 2020 17:43
Thema's: Aangepast gebruikersmodel

In deze tutorial doen we het volgende:

  • een virtuele omgeving creëren
  • Django en Wagtail erin installeren
  • een database opzetten met PostgreSQL
  • een aangepast gebruikersmodel maken

Het gebruik van een aangepast gebruikersmodel en Wagtail gecombineerd vereist het configureren van het gebruikersmodel voordat de eerste databasemigratie wordt uitgevoerd bij het starten van een project, dus dat is wat we gaan doen. Ik neem aan dat je python3 op uw computer hebt geïnstalleerd (zo niet, download het dan op python.org of op Homebrew voor Mac. Ik zal de opdracht python3 consequent gebruiken om verwarring te voorkomen met de vooraf geïnstalleerde Python op Mac. Maak een map voor het project en ga naar die map:

mkdir pet
cd pet

We gebruiken het standaard venv commando om een ​​virtuele omgeving te creëren en gaan deze vervolgens in:

python3 -m venv env
source env/bin/activate

Om Django in deze omgeving te installeren, gebruiken we pip3:

pip3 install django

Aangezien ons wordt gevraagd om bij te werken naar de nieuwste versie van pip in deze omgeving, upgraden we pip:

pip3 install --upgrade pip

Installeer nu Wagtail en start een nieuw Wagtail-project in deze map:

pip3 install wagtail
wagtail start pet .

pet is de naam van het project en de . (punt) vertelt Wagtail om het in de huidige map te installeren (anders zou er een nieuwe map worden gemaakt). Bekijk de projectlayout: Wagtail heeft vooraf veel bestanden geïnstalleerd, zoals requirements.txt, meerdere instellingenbestanden, een homedirectory. Maak je hier nu geen zorgen over.

We willen PostgreSQL gebruiken voor onze database. Download en installeer het op je computer vanaf postgresql.org of voor Mac via Homebrew. Momenteel is de nieuwste versie 12. Om de database te maken, gebruiken we het commando psql. Zorg ervoor dat de map met deze opdracht op je pad is. Alleen het commando psql gebruiken werkt mogelijk niet, omdat psql dan probeert verbinding te maken met een database met dezelfde naam als de gebruikersnaam van je computer. Aangezien de database postgres er standaard is, kunnen we typen:

psql postgres

en bij de nieuwe prompt:

CREATE USER usr_pet WITH PASSWORD '123';
CREATE DATABASE db_pet OWNER usr_pet;

Uiteraard moet je een beter wachtwoord kiezen dan 123. Hier hebben we een dedicated eigenaar usr_pet van onze database db_pet gemaakt. Dit is ook logisch wanneer je je project later op een server implementeert; je wilt niet alle opdrachten als root-gebruiker uitvoeren. Typ \q om psql af te sluiten.

PostgreSQL heeft een Python-stuurprogramma nodig en het meest gebruikte is psycopg2. We zullen de binaire versie psycopg2-binary in onze omgeving installeren, omdat dat minder problemen geeft met mogelijk ontbrekende configuratiebestanden:

pip3 install psycopg2-binary

We houden onze geïnstalleerde pakketten bij in requirements.txt. Als we die openen, zien we dat Django en Wagtail er al in zitten. Voeg psycopg2-binary eraan toe. De basisinstellingen voor ons project staan in settings/base.py. Vervang de bestaande instelling voor DATABASES door de volgende:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'db_pet',
        'USER': 'usr_pet',
        'PASSWORD': '123',
        'HOST': '127.0.0.1',
        'PORT': '5432',
    }
}

Nu is het tijd om ons aangepaste gebruikersmodel te maken. We zullen ons model afleiden van Django's AbstractUser. In de documentatie: "AbstractUser biedt de volledige implementatie van de standaardgebruiker als een abstract model". Samen met het pakket allauth stelt dit ons in staat om alle standaardfuncties van Django te gebruiken, zoals het aanmaken en bewerken van gebruikers, het toevoegen van extra velden, inloggen via e-mail, gebruikersrechten, admin-functionaliteit. Voor meer gespecialiseerde projecten wordt aanbevolen om een ​​subklasse in te voeren van AbstractBaseUser, waarvoor het schrijven van create user / create superuser-methoden, formulieren voor het maken en bewerken van gebruikers in de admin, definiëren van machtigingen. Dit valt buiten het bereik van deze tutorial; er is een voorbeeld in de documentatie.

Je kunt het model in elk models.py-bestand plaatsen, maar omdat we alles met betrekking tot ons gebruikersmodel op één plaats willen houden, maken we hiervoor een aparte app:

python3 manage.py startapp userauth

Voeg userauth toe aan de lijst van INSTALLED_APPS in settings/base.py. Zet het volgende (voorlopig lege) model in het models.py bestand van userauth:

from django.contrib.auth.models import AbstractUser

class CustomUser (AbstractUser):
    pass

We vertellen Django om dit als ons gebruikersmodel te gebruiken door het volgende toe te voegen aan onze settings/base.py:

AUTH_USER_MODEL = 'userauth.CustomUser'

Ons gebruikersmodel neemt alle standaardvelden (gebruikersnaam, wachtwoord enz.) Over van Django's gebruikersmodel en we kunnen later in ons project zoveel velden toevoegen als we willen. Nu kunnen we (eindelijk) onze database migreren:

python3 manage.py makemigrations
python3 manage.py migrate

We kunnen controleren of alles werkt met:

python3 manage.py runserver

en een bezoek brengen aan de pagina http://127.0.0.1:8000 in onze browser. Daar is de Wagtail-startpagina!

Dat is het voor nu. Lees verder als je extra velden wilt toevoegen aan het aangepaste gebruikersmodel en deze wilt toevoegen aan Django en Wagtail admin, zoals geboortedatum, volledig adres, telefoonnummer, of als je login, aanmelding en vele andere authenticatiefuncties wilt toevoegen aan je project.

Reageer op dit artikel (log eerst in of bevestig hieronder met naam en email)