Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este tutorial, aprenderá a implementar una aplicación web de Django controlada Python por datos para Azure App Service y usar Service Connector para conectarla a otros servicios Azure. La aplicación web de muestra guarda la información de los restaurantes y las reseñas en una base de datos de Azure Database for PostgreSQL y almacena fotos en un contenedor de Azure Storage.
Usa CLI de Azure para completar las siguientes tareas:
- Cree una aplicación web Python Django e impleméntela en Azure App Service.
- Cree un Azure Database for PostgreSQL servidor flexible y base de datos.
- Cree una cuenta y un contenedor Azure Storage.
- Conecta la aplicación web a la base de datos y al contenedor de almacenamiento usando Service Connector con autenticación de identidad gestionada .
- Interactúe con la aplicación web.
Nota:
Este tutorial es similar al tutorial de App Service Implementar una aplicación web de Django con Python y PostgreSQL en Azure, pero usa una identidad administrada sin contraseña asignada automáticamente por el sistema con control de acceso basado en roles de Azure para acceder a otros recursos de Azure. En la sección Creación de una conexión de servicio sin contraseña de este artículo se muestra cómo Service Connector simplifica el proceso de conexión.
La aplicación web usa la clase DefaultAzureCredential de la biblioteca cliente de Python Azure Identity para detectar automáticamente cuándo existe una identidad administrada y la usa para acceder a los demás recursos.
Prerrequisitos
Una suscripción de Azure con permisos de escritura y asignación de roles para los recursos del tutorial, en una región de Azure que admite Service Connector y tiene suficiente soporte y cuota de App Service.
Azure Cloud Shell para ejecutar los pasos del tutorial, o si prefiere ejecutar localmente:
- Instala CLI de Azure 2.87.0 o una versión posterior. Para comprobar la versión, ejecute
az version. Para actualizar, ejecuteaz upgrade. - Instale Python 3.
- Instale Git.
- Inicie sesión en Azure mediante
az loginy siga las indicaciones.
- Instala CLI de Azure 2.87.0 o una versión posterior. Para comprobar la versión, ejecute
Configuración del entorno
Registra los proveedores de recursos
Microsoft.ServiceLinkeryMicrosoft.DBforPostgreSQLpara la suscripción.az provider register --namespace Microsoft.ServiceLinker az provider register --namespace Microsoft.DBforPostgreSQLInstala la última versión de la extensión sin contraseña Service Connector. El
--upgradeparámetro actualiza la extensión si ya está instalada:az extension add --name serviceconnector-passwordless --upgrade
Clonación de la aplicación de ejemplo
Importante
El repositorio de muestras del tutorial fue archivado el 15 de junio de 2026 y ya no se mantiene activamente. Úsalo solo para completar este tutorial.
Clona el repositorio de la app de ejemplo.
git clone https://github.com/Azure-Samples/serviceconnector-webapp-postgresql-django-passwordless.gitAlternativamente, puedes descargar la aplicación desde el repositorio serviceconnector-webapp-postgresql-django-passwordless y descomprimirla en una carpeta llamada serviceconnector-webapp-postgresql-django-passwordless.
Cambie los directorios a la carpeta del repositorio mediante
cd serviceconnector-webapp-postgresql-django-passwordlessy ejecute todos los comandos restantes de esa carpeta.
En la aplicación de ejemplo, la configuración de producción de la aplicación web está en el archivo azureproject/production.py . Los ajustes de desarrollo están en Azureproject/settings.py. La configuración de producción configura Django para que se ejecute en cualquier entorno de producción y no sea específica de App Service.
La aplicación usa la configuración de producción cuando se establece la variable de entorno WEBSITE_HOSTNAME. App Service establece esta variable al nombre de host de la app, como msdocs-django.azurewebsites.net.
Para obtener más información, consulte la lista de comprobación de implementación de Django. Consulte también la configuración de Production para Django en Azure.
Definición de variables de entorno iniciales
El código siguiente define las variables de entorno necesarias para este tutorial.
-
LOCATIONdebe ser una región de Azure en la que la suscripción disponga de cuota suficiente para crear los recursos y no restrinja el uso de Azure Database for PostgreSQL en la suscripción. - La contraseña de administrador de PostgreSQL debe contener entre 8 y 128 caracteres de al menos tres de estas categorías: letras mayúsculas, minúsculas, números y caracteres no alfanuméricos. No uses
$en la contraseña de este tutorial.
Configura las siguientes variables de entorno, reemplazándolas
<region>por un valor válido: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"Lee la contraseña de administrador de PostgreSQL sin mostrarla ni añadirla al historial de tu shell:
read -s -p "PostgreSQL administrator password: " ADMIN_PW && echoCree un grupo de recursos para contener todos los recursos del proyecto. El nombre del grupo de recursos se almacena en caché y se aplica automáticamente a los comandos posteriores.
az group create --name $RESOURCE_GROUP_NAME --location $LOCATION
Implementación del código de la aplicación en App Service
Crea el host de la app en App Service, activa la automatización de compilaciones y despliega el código de ejemplo de la app. El plan de App Service Basic (B1) utilizado en este tutorial implica un coste en tu suscripción a Azure. Para los precios actuales, consulta precios de los servicios de aplicaciones.
El archivo requirements.txt de la muestra archivada no declara el servidor Gunicorn que usan start.sh. Añádelo a tu copia local si no está ya presente:
grep -qiE "^gunicorn([=<>~ ]|$)" requirements.txt || echo "gunicorn" >> requirements.txtCrea un plan de Servicio de Aplicaciones para Linux en el rango de precios Básico (B1) y luego crea la aplicación web con el comando de inicio del ejemplo:
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"Habilite la automatización de compilación de App Service para que la implementación instale los paquetes de requirements.txt:
az webapp config appsettings set \ --resource-group $RESOURCE_GROUP_NAME \ --name $APP_SERVICE_NAME \ --settings SCM_DO_BUILD_DURING_DEPLOYMENT=trueDesde la raíz del repositorio, crea un archivo ZIP de la aplicación de ejemplo y despláchalo usando 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.zipEl comando de despliegue tiene éxito cuando App Service acepta el archivo ZIP. La compilación continúa en App Service y puede durar varios minutos.
Crea la base de datos PostgreSQL en Azure
Crea un servidor flexible y una base de datos de Azure Database for PostgreSQL para almacenar los datos de la app.
Cree el servidor de 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 EnabledEl comando tiene éxito cuando el estado de provisión flexible de servidores de PostgreSQL es
Succeeded.Elimina la contraseña de administrador del shell actual después de crear el servidor:
unset ADMIN_PWCrea la base de datos usando 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
Creación de una conexión de servicio sin contraseña
Utiliza az-webapp connection create postgres-flexible para añadir un conector de servicio que conecta la aplicación web de Azure con la base de datos PostgreSQL usando autenticación de identidad gestionada sin contraseña. El comando siguiente configura Azure Database for PostgreSQL para usar la identidad administrada y Azure control de acceso basado en rol. La salida del comando muestra las acciones que realiza Service Connector.
El comando crea una configuración de aplicación llamada AZURE_POSTGRESQL_CONNECTIONSTRING que contiene la información de la conexión a la base de datos. El ejemplo muestra esta configuración en azureproject/production.py. Para obtener más información, consulte Variables de entorno de Access.
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
La conexión está lista cuando el comando informa de la conexión flexible del servidor PostgreSQL y crea la configuración de la AZURE_POSTGRESQL_CONNECTIONSTRING aplicación.
Conecta la aplicación web de Django a Azure Storage con Service Connector
Crea una cuenta de almacenamiento de Azure y, a continuación, usa az webapp connection create storage-blob para conectarla con la aplicación web. El comando de conexión realiza las siguientes acciones:
- Habilita la identidad administrada asignada por el sistema en la aplicación web.
- Añade la aplicación web con el rol Storage Blob Data Contributor a la cuenta de almacenamiento.
- Configura la red de la cuenta de almacenamiento para aceptar el acceso desde la aplicación web.
- Crea una variable de entorno denominada
AZURE_STORAGEBLOB_RESOURCEENDPOINTpara la cuenta de Azure Storage.
Creación de una cuenta de Azure Storage
Crea una cuenta de almacenamiento v2 de propósito general con almacenamiento localmente redundante:
az storage account create \
--resource-group $RESOURCE_GROUP_NAME \
--name $STORAGE_ACCOUNT_NAME \
--location $LOCATION \
--sku Standard_LRS \
--kind StorageV2
Crear una conexión de almacenamiento sin contraseña
Crea la conexión sin contraseña a la cuenta de almacenamiento:
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
La conexión está lista cuando el comando indica la conexión a la cuenta de almacenamiento y crea la configuración de la aplicación AZURE_STORAGEBLOB_RESOURCEENDPOINT.
Configurar el contenedor de fotos de muestra
Actualiza la cuenta de Azure Storage para permitir el acceso público de lectura a los blobs de esta aplicación de muestra archivada.
Nota:
Esta muestra archivada utiliza URL directas de blobs para mostrar fotos, por lo que el tutorial habilita el acceso de lectura anónimo al contenedor
photos. Esta configuración es específica de la muestra y no es requerida por Service Connector. Para aplicaciones de producción, mantén los contenedores privados y utiliza un método de entrega controlado, como un endpoint de aplicación autenticado.az storage account update \ --resource-group $RESOURCE_GROUP_NAME \ --name $STORAGE_ACCOUNT_NAME \ --allow-blob-public-access trueAsigna el permiso de usuario que has iniciado sesión para crear el contenedor usando la autenticación Microsoft Entra:
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_IDEstablecer
MSYS_NO_PATHCONVpara este comando evita que Git Bash en Windows convierta el identificador de recurso de Azure en una ruta de Windows. No tiene efecto en Azure Cloud Shell ni en otros entornos de Bash. La asignación de roles puede tardar unos minutos en ser efectiva.Utiliza az-storage container create para crear un contenedor llamado
photosy permitir el acceso anónimo de lectura a los blobs de ese contenedor: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_ENDPOINTEl contenedor está listo cuando la respuesta muestra
"created": truepara el contenedorphotos.
Prueba de la aplicación web de Python en Azure
Abra y pruebe la aplicación web Azure Restaurant Review. La aplicación usa el paquete azure.identity y su DefaultAzureCredential clase. Cuando la aplicación se ejecuta en Azure, el DefaultAzureCredential detecta automáticamente cuándo existe una identidad administrada para App Service y la usa para acceder a los recursos de Azure Storage y Azure Database for PostgreSQL. La aplicación no necesita proporcionar claves de almacenamiento, certificados ni credenciales para acceder a estos recursos.
Para una instalación de CLI de Azure local, puede usar
az webapp browsepara abrir la aplicación en el explorador predeterminado:az webapp browse --name $APP_SERVICE_NAME --resource-group $RESOURCE_GROUP_NAMEAzure Cloud Shell no puede abrir un explorador local, por lo que no admite el comando
az webapp browse. Desde Cloud Shell, selecciona el enlace de dominio predeterminado en la esquina superior derecha de la página del portal de Azure de la app.
La aplicación puede tardar uno o dos minutos en iniciarse. Si ve una página de aplicación predeterminada que no es la aplicación de ejemplo, espere un minuto y actualice el explorador.
Pruebe la funcionalidad de la aplicación de ejemplo agregando un restaurante y algunas opiniones con fotos. La aplicación debe ser similar a la siguiente captura de pantalla:
Limpieza de recursos
Para evitar cargos continuos, puede eliminar los recursos que creó para este tutorial mediante la eliminación del grupo de recursos que los contiene. Asegúrese de que ya no necesita la aplicación o los recursos antes de ejecutar el comando.
az group delete --name $RESOURCE_GROUP_NAME --no-wait
El comando regresa inmediatamente mientras Azure elimina los recursos.
Solución de problemas
Si la app no se inicia ni conecta a sus recursos, revisa los registros de despliegue de los servicios de aplicaciones, confirma que existen los AZURE_POSTGRESQL_CONNECTIONSTRING ajustes de la app y AZURE_STORAGEBLOB_RESOURCEENDPOINT deja unos minutos para que las asignaciones de roles en Azure entren en vigor. Para problemas de inicio de aplicaciones en Python, véase el siguiente artículo: