Tutorial: Verbind een Django-webapp met Azure Database for PostgreSQL met behulp van Service Connector

In deze zelfstudie leert u hoe u een gegevensgestuurde Python Django-web-app implementeert om Azure App Service en serviceconnector te gebruiken om deze te verbinden met andere Azure-services. De voorbeeldweb-app slaat restaurant- en beoordelingsinformatie op in een Azure Database for PostgreSQL en slaat foto's op in een Azure Storage-container.

U gebruikt Azure CLI om de volgende taken uit te voeren:

Notitie

Deze zelfstudie is vergelijkbaar met de App Service Deploy a Python Django-web-app met PostgreSQL in Azure zelfstudie, maar maakt gebruik van een door het systeem toegewezen beheerde identiteit zonder wachtwoord met Azure op rollen gebaseerd toegangsbeheer voor toegang tot andere Azure resources. In de sectie Een serviceverbinding zonder wachtwoord maken in dit artikel ziet u hoe serviceconnector het verbindingsproces vereenvoudigt.

De web-app maakt gebruik van de klasse DefaultAzureCredential klasse van de Python Azure Identity-clientbibliotheek om automatisch te detecteren wanneer een beheerde identiteit bestaat en deze gebruikt voor toegang tot de andere resources.

Vereiste voorwaarden

  • Een Azure-abonnement met schrijf- en roltoewijzingsmachtigingen voor de zelfstudiebronnen, in een Azure regio die serviceconnector ondersteunt en voldoende App-serviceondersteuning en -quotum heeft.

  • Azure Cloud Shell om de zelfstudiestappen uit te voeren of als u liever lokaal wilt uitvoeren:

    1. Installeer Azure CLI 2.87.0 of hoger. Voer de opdracht uit az versionom uw versie te controleren. Voer az upgrade uit voor een upgrade.
    2. Installeer Python 3.
    3. Installeer Git.
    4. Meld u aan bij Azure met behulp van az login en volg de aanwijzingen.

Uw omgeving instellen

  1. Registreer de resourceproviders Microsoft.DBforPostgreSQL en Microsoft.ServiceLinker voor uw abonnement.

    az provider register --namespace Microsoft.ServiceLinker
    az provider register --namespace Microsoft.DBforPostgreSQL
    
  2. Installeer de nieuwste versie van de Service Connector wachtwoordloze extensie. De --upgrade parameter actualiseert de extensie als deze al geïnstalleerd is:

    az extension add --name serviceconnector-passwordless --upgrade
    

De voorbeeld-app klonen

Important

De voorbeeldrepository van de tutorial werd gearchiveerd op 15 juni 2026 en wordt niet langer actief onderhouden. Gebruik het alleen om deze tutorial te voltooien.

  1. Kloon de opslagplaats van de voorbeeld-app.

    git clone https://github.com/Azure-Samples/serviceconnector-webapp-postgresql-django-passwordless.git
    

    Alternatief kun je de app downloaden uit de serviceconnector-webapp-postgresql-django-passwordless repository en deze uitpakken in een map genaamd serviceconnector-webapp-postgresql-django-passwordless.

  2. Verander van directory naar de map van de repository met cd serviceconnector-webapp-postgresql-django-passwordless en voer alle resterende opdrachten vanuit die map uit.

In de voorbeeldapp staan de productie-instellingen voor webapplicaties in het azureproject/production.py-bestand . De ontwikkelinstellingen bevinden zich in azureproject/settings.py. De productie-instellingen configureren Django om te worden uitgevoerd in een productieomgeving en zijn niet specifiek voor App Service.

De app maakt gebruik van productie-instellingen wanneer de WEBSITE_HOSTNAME omgevingsvariabele is ingesteld. App Service stelt deze variabele in op de hostnaam van de app, zoals msdocs-django.azurewebsites.net.

Zie de Controlelijst voor Django-implementatie voor meer informatie. Zie ook Production-instellingen voor Django op Azure.

Initiële omgevingsvariabelen definiëren

De volgende code definieert de benodigde omgevingsvariabelen voor deze zelfstudie.

  • LOCATION moet een Azure-regio zijn waar uw abonnement voldoende capaciteit heeft om de resources te maken en de Azure Database for PostgreSQL voor uw abonnement niet beperkt is.
  • Het wachtwoord van de PostgreSQL-beheerder moet 8 tot 128 tekens bevatten uit ten minste drie van deze categorieën: hoofdletters, kleine letters, cijfers en niet-alfanumerieke tekens. Gebruik $ niet in het wachtwoord voor deze tutorial.
  1. Stel de volgende omgevingsvariabelen in, waarbij je vervangt <region> door een geldige waarde:

    LOCATION="<region>"
    RAND_ID=$RANDOM$RANDOM
    RESOURCE_GROUP_NAME="msdocs-mi-web-app-$RAND_ID"
    APP_SERVICE_NAME="msdocs-mi-web-$RAND_ID"
    APP_SERVICE_PLAN_NAME="$APP_SERVICE_NAME-plan"
    DB_SERVER_NAME="msdocs-mi-postgres-$RAND_ID"
    DATABASE_NAME="restaurant"
    STORAGE_ACCOUNT_NAME="account$RAND_ID"
    ADMIN_USER="demoadmin"
    
  2. Lees het wachtwoord van de PostgreSQL-beheerder zonder het te tonen of toe te voegen aan je shellgeschiedenis:

    read -s -p "PostgreSQL administrator password: " ADMIN_PW && echo
    
  3. Maak een resourcegroep die alle projectresources bevat. De naam van de resourcegroep wordt in de cache opgeslagen en automatisch toegepast op volgende opdrachten.

    az group create --name $RESOURCE_GROUP_NAME --location $LOCATION
    

De app-code implementeren in App Service

Maak de app-host aan in App Service, schakel build-automatisering in en deploy de voorbeeldcode van de app. Het Basic (B1) App Service-plan dat in deze tutorial wordt gebruikt, brengt kosten met zich mee in je Azure-abonnement. Voor actuele prijzen, zie App Service-prijzen.

  1. Het requirements.txt-bestand van het gearchiveerde sample geeft niet aan welke Gunicorn-server door start.sh wordt gebruikt. Voeg het toe aan je lokale kopie als het nog niet aanwezig is:

    grep -qiE "^gunicorn([=<>~ ]|$)" requirements.txt || echo "gunicorn" >> requirements.txt
    
  2. Maak een Linux App Service-plan aan in de Basic (B1) prijscategorie, en maak vervolgens de webapp met het opstartcommando van het voorbeeld:

    az appservice plan create \
      --resource-group $RESOURCE_GROUP_NAME \
      --name $APP_SERVICE_PLAN_NAME \
      --location $LOCATION \
      --sku B1 \
      --is-linux
    
    az webapp create \
      --resource-group $RESOURCE_GROUP_NAME \
      --name $APP_SERVICE_NAME \
      --plan $APP_SERVICE_PLAN_NAME \
      --runtime "PYTHON:3.14" \
      --startup-file "start.sh"
    
  3. Schakel App Service build-automatisering in zodat de deployment de pakketten in requirements.txtinstalleert:

    az webapp config appsettings set \
      --resource-group $RESOURCE_GROUP_NAME \
      --name $APP_SERVICE_NAME \
      --settings SCM_DO_BUILD_DURING_DEPLOYMENT=true
    
  4. Maak vanuit de repository-root een ZIP-bestand van de voorbeeldapp en deploy deze met az webapp deploy:

    rm -f app.zip
    python -m zipfile -c app.zip *
    
    az webapp deploy \
      --resource-group $RESOURCE_GROUP_NAME \
      --name $APP_SERVICE_NAME \
      --src-path app.zip \
      --type zip \
      --track-status false
    
    rm app.zip
    

    Het deployment-commando slaagt wanneer App Service het ZIP-bestand accepteert. De build gaat verder in App Service en kan enkele minuten duren.

Maak de PostgreSQL-database in Azure

Maak een flexibele server en database aan in Azure Database for PostgreSQL om de app-gegevens op te slaan.

  1. Maak de Azure Database for PostgreSQL-server:

    az postgres flexible-server create \
      --resource-group $RESOURCE_GROUP_NAME \
      --name $DB_SERVER_NAME \
      --location $LOCATION \
      --admin-user $ADMIN_USER \
      --admin-password $ADMIN_PW \
      --sku-name Standard_D2ds_v4 \
      --microsoft-entra-auth Enabled
    

    De opdracht slaagt wanneer de inrichtingsstatus van de PostgreSQL Flexible Server Succeeded is.

  2. Verwijder het beheerderswachtwoord uit de huidige shell nadat de server is aangemaakt:

    unset ADMIN_PW
    
  3. Maak de database aan door gebruik te maken van az postgres flexible-server db create:

    az postgres flexible-server db create \
      --resource-group $RESOURCE_GROUP_NAME \
      --server-name $DB_SERVER_NAME \
      --name $DATABASE_NAME
    

Een serviceverbinding zonder wachtwoord maken

Gebruik az webapp connection, create postgres-flexible, om een serviceconnector toe te voegen die de Azure webapp verbindt met de PostgreSQL-database via wachtwoordloze beheerde identiteitsauthenticatie. Met de volgende opdracht configureert u Azure Database for PostgreSQL voor het gebruik van beheerde identiteit en Azure op rollen gebaseerd toegangsbeheer. De uitvoer van de opdracht bevat de acties die Service Connector uitvoert.

Het commando maakt een app-instelling aan die de database-verbindingsinformatie AZURE_POSTGRESQL_CONNECTIONSTRING bevat. Het voorbeeld leest deze instelling in azureproject/production.py. Zie Omgevingsvariabelen van Access voor meer informatie.

az webapp connection create postgres-flexible \
  --resource-group $RESOURCE_GROUP_NAME \
  --name $APP_SERVICE_NAME \
  --target-resource-group $RESOURCE_GROUP_NAME \
  --server $DB_SERVER_NAME \
  --database $DATABASE_NAME \
  --client-type python \
  --system-identity \
  --yes

De verbinding is klaar wanneer het commando de PostgreSQL flexibele serververbinding rapporteert en de AZURE_POSTGRESQL_CONNECTIONSTRING app-instelling aanmaakt.

Verbind de Django web app met Azure Storage met Service Connector

Maak een Azure-storageaccount aan en gebruik vervolgens az webapp connection create storage-blob om dit te verbinden met de web-app. Het verbindingscommando voert de volgende acties uit:

  • Hiermee schakelt u door het systeem toegewezen beheerde identiteit in de web-app in.
  • Voegt de webapp met de rol Storage Blob Data Contributor toe aan het opslagaccount.
  • Hiermee configureert u het netwerk van het opslagaccount om toegang te accepteren vanuit de web-app.
  • Hiermee maakt u een omgevingsvariabele met de naam AZURE_STORAGEBLOB_RESOURCEENDPOINT voor het Azure Storage-account.

Een Azure Storage-account maken

Maak een algemeen v2-opslagaccount aan met lokaal redundante opslag:

az storage account create \
  --resource-group $RESOURCE_GROUP_NAME \
  --name $STORAGE_ACCOUNT_NAME \
  --location $LOCATION \
  --sku Standard_LRS \
  --kind StorageV2

Maak een wachtwoordloze opslagverbinding aan

Maak de wachtwoordloze verbinding met het opslagaccount aan:

az webapp connection create storage-blob \
  --resource-group $RESOURCE_GROUP_NAME \
  --name $APP_SERVICE_NAME \
  --target-resource-group $RESOURCE_GROUP_NAME \
  --account $STORAGE_ACCOUNT_NAME \
  --client-type python \
  --system-identity

De verbinding is klaar wanneer het commando de opslagaccountverbinding rapporteert en de AZURE_STORAGEBLOB_RESOURCEENDPOINT app-instelling aanmaakt.

Configureer de voorbeeldfotocontainer

  1. Werk het Azure Storage-account bij om publieke leestoegang tot blobs voor deze gearchiveerde voorbeeldapp mogelijk te maken.

    Notitie

    Dit gearchiveerde voorbeeld gebruikt directe blob-URL's om foto's weer te geven, zodat de tutorial anonieme leestoegang tot de photos container mogelijk maakt. Deze instelling is specifiek voor het voorbeeld en is niet vereist door Service Connector. Voor productie-apps houd containers privé en gebruik een gecontroleerde leveringsmethode, zoals een geauthenticeerd applicatie-endpoint.

    az storage account update \
      --resource-group $RESOURCE_GROUP_NAME \
      --name $STORAGE_ACCOUNT_NAME \
      --allow-blob-public-access true
    
  2. Ken uw ingelogde gebruiker toestemming toe om de container aan te maken met Microsoft Entra-authenticatie:

    SIGNED_IN_USER_ID=$(az ad signed-in-user show --query id --output tsv)
    STORAGE_ACCOUNT_ID=$(az storage account show \
      --resource-group $RESOURCE_GROUP_NAME \
      --name $STORAGE_ACCOUNT_NAME \
      --query id \
      --output tsv)
    
    MSYS_NO_PATHCONV=1 az role assignment create \
      --assignee-object-id $SIGNED_IN_USER_ID \
      --assignee-principal-type User \
      --role "Storage Blob Data Contributor" \
      --scope $STORAGE_ACCOUNT_ID
    

    Het instellen van MSYS_NO_PATHCONV voor deze opdracht voorkomt dat Git Bash op Windows de Azure-resource-id omzet in een Windows-pad. Het heeft geen effect in Azure Cloud Shell of andere Bash-omgevingen. Roltoewijzingen kunnen enkele minuten duren voordat ze effectief zijn.

  3. Gebruik az storage container create om een container aan te maken die wordt aangeroepen photos en anonieme leestoegang te geven aan blobs in die container:

    BLOB_ENDPOINT=$(az storage account show \
      --resource-group $RESOURCE_GROUP_NAME \
      --name $STORAGE_ACCOUNT_NAME \
      --query primaryEndpoints.blob \
      --output tsv)
    
    az storage container create \
      --account-name $STORAGE_ACCOUNT_NAME \
      --name photos \
      --public-access blob \
      --auth-mode login \
      --blob-endpoint $BLOB_ENDPOINT
    

    De container is klaar wanneer de respons photos voor de "created": true-container toont.

De Python-web-app testen in Azure

Open en test de Azure Restaurant Review webapp. De app maakt gebruik van het azure.identity-pakket en de bijbehorende DefaultAzureCredential klasse. Wanneer de app wordt uitgevoerd in Azure, detecteert de DefaultAzureCredential automatisch wanneer er een beheerde identiteit voor de App Service bestaat en wordt deze gebruikt voor toegang tot de Azure Storage- en Azure Database for PostgreSQL-resources. De app hoeft geen opslagsleutels, certificaten of referenties op te geven voor toegang tot deze resources.

  • Voor een lokale Azure CLI-installatie kunt u az webapp browse gebruiken om de app te openen in uw standaardbrowser:

    az webapp browse --name $APP_SERVICE_NAME --resource-group $RESOURCE_GROUP_NAME
    
  • Azure Cloud Shell een lokale browser niet kan openen, zodat de opdracht az webapp browse niet wordt ondersteund. Selecteer vanuit Cloud Shell de standaard domeinlink rechtsboven op de Azure-portaalpagina van de app.

Het kan een paar minuten duren voordat de app is gestart. Als u een standaard-app-pagina ziet die niet de voorbeeld-app is, wacht u even en vernieuwt u de browser.

Test de functionaliteit van de voorbeeld-app door een restaurant en enkele beoordelingen met foto's toe te voegen. De app moet er ongeveer uitzien als in de volgende schermopname:

Screenshot van de voorbeeld-website voor restaurantrecensies die een restaurantvermelding toont met een klantrecensie en een geüploade foto.

Resources opschonen

Als u doorlopende kosten wilt voorkomen, kunt u de resources verwijderen die u voor deze zelfstudie hebt gemaakt door de resourcegroep met deze resources te verwijderen. Zorg ervoor dat u de app of de resources niet meer nodig hebt voordat u de opdracht uitvoert.

az group delete --name $RESOURCE_GROUP_NAME --no-wait

Het commando keert onmiddellijk terug terwijl Azure de resources verwijdert.

Troubleshooting

Als de app niet start of verbinding maakt met zijn resources, controleer dan de App Service-implementatielogs, bevestig dat de AZURE_POSTGRESQL_CONNECTIONSTRING en AZURE_STORAGEBLOB_RESOURCEENDPOINT app-instellingen bestaan, en laat een paar minuten Azure-roltoewijzingen van kracht worden. Voor problemen met het opstarten van Python-apps, zie het volgende artikel: