Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
I den här självstudien får du lära dig hur du distribuerar en datadriven webbapp i Python Django till Azure App Service och använder Service Connector för att ansluta den till andra Azure-tjänster. Exempelwebbappen lagrar restaurang- och recensioninformation i en Azure Database for PostgreSQL och lagrar foton i en Azure Storage-container.
Du använder Azure CLI för att utföra följande uppgifter:
- Skapa en Python Django webbapp och distribuera den till Azure App Service.
- Skapa en Azure Database for PostgreSQL flexibel server och databas.
- Skapa ett Azure Storage konto och container.
- Koppla webbappen till databasen och lagringsbehållaren genom att använda Service Connector med hanterad identitetsautentisering .
- Interagera med webbappen.
Kommentar
Den här självstudien liknar App Service Distribuera en Python Django-webbapp med PostgreSQL i Azure, men använder en systemtilldelad lösenordslös hanterad identitet med rollbaserad åtkomstkontroll i Azure för att få åtkomst till andra Azure-resurser. Avsnittet Skapa en lösenordslös tjänstanslutning i den här artikeln visar hur Service Connector förenklar anslutningsprocessen.
Webbappen använder klassen DefaultAzureCredential för klientbiblioteket Python Azure Identity för att automatiskt identifiera när en hanterad identitet finns och använder den för att komma åt de andra resurserna.
Förutsättningar
En Azure-prenumeration med skriv- och rolltilldelningsbehörigheter för självstudieresurserna i en Azure region som supports Service Connector och har tillräckligt App Service-stöd och kvot.
Azure Cloud Shell för att genomföra handledningsstegen eller om du föredrar att köra lokalt:
Konfigurera din miljö
Registrera resursleverantörerna
Microsoft.ServiceLinkerochMicrosoft.DBforPostgreSQLför din prenumeration.az provider register --namespace Microsoft.ServiceLinker az provider register --namespace Microsoft.DBforPostgreSQLInstallera den senaste versionen av Service Connector-tillägget utan lösenord. Parametern
--upgradeuppdaterar tillägget om det redan är installerat:az extension add --name serviceconnector-passwordless --upgrade
Klona exempelappen
Important
Handledningens exempelarkiv arkiverades den 15 juni 2026 och underhålls inte längre aktivt. Använd den bara för att slutföra denna handledning.
Klona exempelapplagringsplatsen.
git clone https://github.com/Azure-Samples/serviceconnector-webapp-postgresql-django-passwordless.gitAlternativt kan du ladda ner appen från serviceconnector-webapp-postgresql-django-passwordless arkivet och packa upp den i en mapp som heter serviceconnector-webapp-postgresql-django-passwordless.
Ändra kataloger till lagringsplatsmappen med hjälp av
cd serviceconnector-webapp-postgresql-django-passwordlessoch kör alla återstående kommandon från mappen.
I exempelappen finns produktionsinställningarna för webbappen i filen azureproject/production.py . Utvecklingsinställningarna är i Azureproject/settings.py. Produktionsinställningarna konfigurerar Django att köras i alla produktionsmiljöer och är inte specifika för App Service.
Appen använder produktionsinställningar när WEBSITE_HOSTNAME miljövariabeln anges. App Service sätter denna variabel till appens värdnamn, såsom msdocs-django.azurewebsites.net.
Mer information finns i checklistan för Django-distribution. Se även inställningar för Production för Django på Azure.
Definiera inledande miljövariabler
Följande kod definierar nödvändiga miljövariabler för den här handledningen.
-
LOCATIONmåste vara en Azure region där din prenumeration har tillräcklig kvot för att skapa resurserna och inte begränsar Azure Database for PostgreSQL för din prenumeration. - PostgreSQL-administratörens lösenord måste innehålla 8 till 128 tecken från minst tre av dessa kategorier: versaler, gemener, siffror och icke-alfanumeriska tecken. Använd inte
$lösenordet för denna handledning.
Sätt upp följande miljövariabler och ersätt
<region>med ett giltigt värde: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"Läs PostgreSQL-administratörslösenordet utan att visa det eller lägga till det i din shellhistorik:
read -s -p "PostgreSQL administrator password: " ADMIN_PW && echoSkapa en resursgrupp som ska innehålla alla projektresurser. Resursgruppens namn cachelagras och tillämpas automatiskt på efterföljande kommandon.
az group create --name $RESOURCE_GROUP_NAME --location $LOCATION
Distribuera appkoden till App Service
Skapa appvärden i App Service, aktivera automatiserade byggen och distribuera exempelkoden för appen. Basic (B1) App Service-planen som används i denna handledning medför en kostnad i din Azure-prenumeration. För aktuella priser, se App Service-priser.
Den arkiverade provets requirements.txt-fil deklarerar inte Gunicorn-servern som används av start.sh. Lägg till den i din lokala kopia om den inte redan finns:
grep -qiE "^gunicorn([=<>~ ]|$)" requirements.txt || echo "gunicorn" >> requirements.txtSkapa en Linux App Service-plan i Basic (B1)-prisklassen, och skapa sedan webbappen med provets startkommando:
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"Aktivera App Service-byggautomation så att distributionen installerar paketen i requirements.txt:
az webapp config appsettings set \ --resource-group $RESOURCE_GROUP_NAME \ --name $APP_SERVICE_NAME \ --settings SCM_DO_BUILD_DURING_DEPLOYMENT=trueFrån repositoroten skapar du en ZIP-fil av exempelappen och distribuerar den genom att använda 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.zipUtplaceringskommandot lyckas när App Service accepterar ZIP-filen. Bygget fortsätter i App Service och kan ta flera minuter.
Skapa PostgreSQL-databasen i Azure
Skapa en flexibel server och databas i Azure Database for PostgreSQL för att lagra appdata.
Skapa servern för Azure Database for PostgreSQL:
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 EnabledKommandot lyckas när PostgreSQL:s flexibla serverprovisioneringstillstånd är
Succeeded.Ta bort administratörslösenordet från det aktuella kommandoskalet efter att servern har skapats:
unset ADMIN_PWSkapa databasen genom att använda 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
Skapa en lösenordslös tjänstanslutning
Använd az webapp connection create postgres-flexible för att lägga till en service connector som kopplar Azure-webbappen till PostgreSQL-databasen med lösenordslös hanterad identitetsautentisering. Följande kommando konfigurerar Azure Database for PostgreSQL att använda hanterad identitet och Azure rollbaserad åtkomstkontroll. Kommandoutdata visar de åtgärder som Service Connector vidtar.
Kommandot skapar en appinställning som AZURE_POSTGRESQL_CONNECTIONSTRING heter och innehåller databasens anslutningsinformation. Exemplet visar denna inställning i azureproject/production.py. Mer information finns i Åtkomstmiljövariabler.
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
Anslutningen är redo när kommandot rapporterar PostgreSQL:s flexibla serveranslutning och skapar AZURE_POSTGRESQL_CONNECTIONSTRING appinställningen.
Koppla Django-webbappen till Azure Storage med Service Connector
Skapa ett Azure-lagringskonto och använd sedan az webapp connection create storage-blob för att ansluta det till webbappen. Anslutningskommandot utför följande åtgärder:
- Aktiverar systemtilldelad hanterad identitet i webbappen.
- Lägger till webbappen med rollen Storage Blob Data Contributor till lagringskontot.
- Konfigurerar lagringskontots nätverk för att acceptera åtkomst från webbappen.
- Skapar en miljövariabel med namnet
AZURE_STORAGEBLOB_RESOURCEENDPOINTför Azure Storage-kontot.
Skapa ett Azure Storage-konto
Skapa ett allmänt v2-lagringskonto med lokalt redundant lagring:
az storage account create \
--resource-group $RESOURCE_GROUP_NAME \
--name $STORAGE_ACCOUNT_NAME \
--location $LOCATION \
--sku Standard_LRS \
--kind StorageV2
Skapa en lösenordslös lagringsanslutning
Skapa den lösenordslösa anslutningen till lagringskontot:
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
Anslutningen är redo när kommandot rapporterar lagringskontots anslutning och skapar AZURE_STORAGEBLOB_RESOURCEENDPOINT appinställningen.
Konfigurera behållaren för exempelfoto
Uppdatera Azure Storage-kontot för att tillåta offentlig läsåtkomst till blobs för denna arkiverade exempelapp.
Kommentar
Detta arkiverade prov använder direkta blob-URL:er för att visa foton, så handledningen möjliggör anonym läsåtkomst till containern
photos. Denna inställning är specifik för provet och krävs inte av Service Connector. För produktionsappar, håll containrar privata och använd en kontrollerad leveransmetod, såsom en autentiserad applikationsendpoint.az storage account update \ --resource-group $RESOURCE_GROUP_NAME \ --name $STORAGE_ACCOUNT_NAME \ --allow-blob-public-access trueTilldela din inloggade användarbehörighet att skapa containern med Microsoft Entra-autentisering:
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_IDInställningen
MSYS_NO_PATHCONVför detta kommando förhindrar att Git Bash på Windows konverterar Azure-resurs-ID:t till en Windows-sökväg. Den har ingen effekt i Azure Cloud Shell eller andra Bash-miljöer. Rollutdelningar kan ta några minuter innan de blir effektiva.Använd az storage container create för att skapa en container som anropas
photosoch tillåt anonym läsåtkomst till blobs i den containern: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_ENDPOINTBehållaren är redo när svaret visas
"created": trueför containernphotos.
Testa Python-webbappen i Azure
Öppna och testa webbappen Azure Restaurant Review. Appen använder azure.identity-paketet och dess DefaultAzureCredential klass. När appen körs i Azure identifierar DefaultAzureCredential automatiskt när en hanterad identitet finns för App Service och använder den för att komma åt Azure Storage och Azure Database for PostgreSQL resurser. Appen behöver inte ange lagringsnycklar, certifikat eller autentiseringsuppgifter för att få åtkomst till dessa resurser.
För en lokal Azure CLI installation kan du använda
az webapp browseför att öppna appen i standardwebbläsaren:az webapp browse --name $APP_SERVICE_NAME --resource-group $RESOURCE_GROUP_NAMEAzure Cloud Shell kan inte öppna en lokal webbläsare, så den stöder inte kommandot
az webapp browse. Från Cloud Shell, välj länken Standarddomän i det övre högra hörnet på appens Azure-portalsida.
Det kan ta en minut eller två innan appen startas. Om du ser en standardappsida som inte är exempelappen väntar du en minut och uppdaterar webbläsaren.
Testa funktionerna i exempelappen genom att lägga till en restaurang och några recensioner med foton. Appen bör likna följande skärmbild:
Rensa resurser
För att undvika löpande avgifter kan du ta bort de resurser som du skapade för den här självstudien genom att ta bort den resursgrupp som innehåller dem. Se till att du inte längre behöver appen eller resurserna innan du kör kommandot.
az group delete --name $RESOURCE_GROUP_NAME --no-wait
Kommandot returneras omedelbart medan Azure raderar resurserna.
Felsökning
Om appen inte startar eller ansluter till sina resurser kontrollerar du distributionsloggarna för App Service, kontrollerar att appinställningarna AZURE_STORAGEBLOB_RESOURCEENDPOINT och AZURE_POSTGRESQL_CONNECTIONSTRING finns och väntar några minuter så att Azure-rolltilldelningar hinner träda i kraft. För problem med Python-appstart, se följande artikel: