Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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:
- Maak een Python Django-web-app en implementeer deze in Azure App Service.
- Maak een Azure Database for PostgreSQL flexibele server en database.
- Maak een Azure Storage-account en -container.
- Verbind de webapp met de database en opslagcontainer door Service Connector met beheerde identiteitsauthenticatie te gebruiken.
- Interactie met de web-app.
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:
Uw omgeving instellen
Registreer de resourceproviders
Microsoft.DBforPostgreSQLenMicrosoft.ServiceLinkervoor uw abonnement.az provider register --namespace Microsoft.ServiceLinker az provider register --namespace Microsoft.DBforPostgreSQLInstalleer de nieuwste versie van de Service Connector wachtwoordloze extensie. De
--upgradeparameter 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.
Kloon de opslagplaats van de voorbeeld-app.
git clone https://github.com/Azure-Samples/serviceconnector-webapp-postgresql-django-passwordless.gitAlternatief 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.
Verander van directory naar de map van de repository met
cd serviceconnector-webapp-postgresql-django-passwordlessen 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.
-
LOCATIONmoet 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.
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"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 && echoMaak 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.
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.txtMaak 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"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=trueMaak 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.zipHet 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.
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 EnabledDe opdracht slaagt wanneer de inrichtingsstatus van de PostgreSQL Flexible Server
Succeededis.Verwijder het beheerderswachtwoord uit de huidige shell nadat de server is aangemaakt:
unset ADMIN_PWMaak 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_RESOURCEENDPOINTvoor 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
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
photoscontainer 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 trueKen 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_IDHet instellen van
MSYS_NO_PATHCONVvoor 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.Gebruik az storage container create om een container aan te maken die wordt aangeroepen
photosen 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_ENDPOINTDe container is klaar wanneer de respons
photosvoor 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 browsegebruiken om de app te openen in uw standaardbrowser:az webapp browse --name $APP_SERVICE_NAME --resource-group $RESOURCE_GROUP_NAMEAzure Cloud Shell een lokale browser niet kan openen, zodat de opdracht
az webapp browseniet 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:
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: