Premiers pas dans l'environnement standard Python 2

Ce guide est conçu pour vous aider à apprendre à développer et à déployer des applications Python 2.7 de base s'exécutant dans l'environnement standard Google App Engine. Il s'adresse aux personnes qui débutent avec Google App Engine, les services associés et, en particulier, l’utilisation d'App Engine avec le langage Python. C'est pourquoi, pour chaque tâche, les explications fournies dans le guide sont plus détaillées que celles données par le guide de démarrage rapide.

Avant de commencer

Pour pouvoir développer votre application :

  1. Créez un projet dans la console Google Cloud Platform (GCP) ou récupérez l'ID d'un projet existant à partir de cette dernière.

    Accéder à la page Projets

  2. Installez, puis initialisez le SDK Google Cloud.

Créer une application de base

Ce guide utilise le framework d'application Web Flask en raison de sa simplicité, de sa facilité d'utilisation et de son extensibilité, mais les mêmes principes peuvent être appliqués à tout framework que vous souhaitez utiliser. Ce guide vous apprend à :

  • créer un formulaire de commentaire utilisateur de base qui va afficher le contenu que l'utilisateur envoie via ce formulaire dans un modèle HTML que vous créez ;
  • créer une application de base pouvant diffuser des fichiers statiques, tels que des fichiers CSS ou des images.

Une fois que vous avez configuré votre environnement de développement, vous pouvez écrire le code de l'application et le déployer dans App Engine.

Structure de base d'un projet d'application

Ce guide utilise la structure suivante pour le projet flask-app :

Structure du projet flask-app

  • app.yaml : configuration des paramètres de votre application App Engine
  • main.py : écriture du contenu de votre application
  • static : répertoire de stockage de vos fichiers statiques
    • style.css : feuille de style de base qui met en forme vos fichiers de modèle
  • templates : répertoire de tous vos modèles HTML
    • form.html : modèle HTML pour l'affichage de votre formulaire
    • submitted_form.html : modèle HTML pour l'affichage du contenu d'un formulaire envoyé

Configurer des bibliothèques pour permettre le développement

Ce tutoriel place une copie de la bibliothèque Flask dans le répertoire de votre application. Notez que, même si l'environnement d'exécution App Engine Python 2.7 propose une bibliothèque Flask intégrée, cette dernière est une version plus ancienne qui risque de ne pas fonctionner avec ce tutoriel.

Pour configurer les bibliothèques requises, procédez comme suit :

  1. Créez un fichier nommé appengine_config.py dans le répertoire racine du projet. Lorsque vous déployez votre application, vous pouvez utiliser ce fichier pour spécifier où App Engine doit rechercher les bibliothèques tierces :

    from google.appengine.ext import vendor
    
    # Add any libraries installed in the "lib" folder.
    vendor.add('lib')
  2. Créez un fichier nommé requirements.txt dans le répertoire racine du projet :

    Flask==0.12.4
    Werkzeug<0.13.0,>=0.12.0
    
  3. Pour exécuter cette application sur votre ordinateur local, configurez un environnement de développement Python incluant Python, pip et virtualenv. Pour obtenir les instructions correspondantes, consultez la page Configurer un environnement de développement Python pour Google Cloud Platform.

  4. Installez les dépendances à l'aide de virtualenv :

    macOS/Linux

    1. Créez un environnement Python isolé dans un répertoire externe à votre projet et activez-le :
      virtualenv env
      source env/bin/activate
      À la fin du tutoriel, vous pourrez quitter votre virtualenv en saisissant deactivate.
    2. Accédez au répertoire de votre projet et installez les dépendances :
      cd YOUR_PROJECT
      pip install -t lib -r requirements.txt

    Windows

    Si vous avez installé le SDK Cloud, vous devez disposer de Python 2.7, généralement disponible sous C:\python27_x64\ (pour les systèmes 64 bits). Exécutez les packages Python à l'aide de PowerShell.

    1. Localisez votre installation de PowerShell.
    2. Cliquez avec le bouton droit sur le raccourci PowerShell et démarrez une session en tant qu'administrateur.
    3. Essayez d'exécuter la commande python. Si le dossier Python est introuvable, ajoutez-le à la variable d'environnement PATH.
      $env:Path += ";C:\python27_x64\"
    4. Créez un environnement Python isolé dans un répertoire externe à votre projet et activez-le :
      python -m virtualenv env
      env\Scripts\activate
      À la fin du tutoriel, vous pourrez quitter votre virtualenv en saisissant deactivate.
    5. Accédez au répertoire de votre projet et installez les dépendances :
      cd YOUR_PROJECT
      python -m pip install -t lib -r requirements.txt

    L'indicateur -t lib copie les bibliothèques dans un dossier lib, qui est chargé dans App Engine lors du déploiement. Pour plus d'informations sur la copie de bibliothèques tierces, consultez la page Utiliser le fichier pip requirements.txt avec des bibliothèques copiées.

    L'indicateur -r requirements.txt demande à pip de tout installer à partir d'un fichier requirements.txt.

Créer le fichier app.yaml

Vous pouvez configurer les paramètres de votre application App Engine dans le fichier app.yaml que vous créez manuellement ou dans le cadre de la création de votre projet de développement. Le fichier app.yaml est un fichier de configuration qui indique à App Engine comment exécuter votre application et comment mapper des URL à des fichiers statiques et à des modules Python.

Pour créer le fichier app.yaml, procédez comme suit :

  1. Créez un fichier nommé app.yaml dans le répertoire racine de votre projet.
  2. Ajoutez les lignes suivantes au fichier :

    runtime: python27
    api_version: 1
    threadsafe: true
    
    libraries:
    - name: ssl
      version: latest
    
    handlers:
    - url: /static
      static_dir: static
    - url: /.*
      script: main.app
    

Pour obtenir d'autres informations de référence sur le fichier app.yaml, consultez la documentation de référence sur app.yaml.

Créer un gestionnaire de requêtes pour votre application Flask

Lorsque le service App Engine reçoit une requête Web pour votre application, il appelle le script de gestionnaire correspondant à l'URL, comme indiqué dans le fichier de configuration app.yaml de l'application. L'environnement d'exécution Python 2.7 accepte la norme WSGI. Il est préférable d'utiliser WSGI, sinon certaines fonctionnalités de Python 2.7 ne fonctionneront pas. La configuration des gestionnaires de script de votre application détermine si une requête est gérée à l'aide de WSGI.

Le serveur détermine l'objet d'application Python à appeler en comparant l'URL de la requête aux modèles d'URL du fichier de configuration de l'application. Il appelle ensuite l'objet d'application à l'aide des arguments définis dans la norme WSGI. L'objet d'application exécute les actions adaptées à la requête, prépare ensuite une réponse et la renvoie sous forme de liste de chaînes.

Les gestionnaires de requêtes suivants prennent les informations envoyées dans le formulaire du fichier /templates/form.html et les placent dans le fichier de modèle /templates/submitted_form.html :

  1. Créez un fichier nommé main.py dans le répertoire racine de votre application.

  2. Importez le framework Flask et les interfaces Flask que vous souhaitez utiliser :

    from flask import Flask, render_template, request
  3. Ajoutez cette ligne pour créer une instance de la classe Flask et affectez-la à une variable nommée app :

    app = Flask(__name__)
  4. Créez un gestionnaire de requêtes qui affiche un formulaire à l'aide du modèle form.html :

    @app.route('/form')
    def form():
        return render_template('form.html')

    Lorsque l'utilisateur accède au répertoire /form/ de l'application, le modèle form.html créé est affiché.

  5. Créez un gestionnaire de requêtes qui gère les informations du formulaire envoyé :

    @app.route('/submitted', methods=['POST'])
    def submitted_form():
        name = request.form['name']
        email = request.form['email']
        site = request.form['site_url']
        comments = request.form['comments']
    

    L'application stocke les informations du formulaire dans les variables que vous avez créées ici. Ces variables vous permettent d'afficher les données du formulaire sur le modèle submitted_form.html que vous allez créer.

Pour en savoir plus sur la prise en main rapide de Flask, consultez le guide de démarrage rapide de Flask.

Vous pouvez facilement étendre les fonctionnalités de ce formulaire. Par exemple, vous pouvez utiliser l'API Mail, Mailgun, Mailjet ou SendGrid pour envoyer les commentaires que les utilisateurs soumettent à vous-même ou à d'autres.

Configurer des modèles Jinja2

Étant donné que le code HTML incorporé au code peut être difficile à gérer, vous devez utiliser un système de création de modèles, en stockant le code HTML dans un fichier distinct utilisant une syntaxe spéciale pour spécifier l'emplacement des données renvoyées par une application. Vous pouvez utiliser le moteur de création de modèles de votre choix en l'incorporant au code de votre application. Pour plus de commodité, App Engine inclut les moteurs de création de modèles Django et Jinja2.

  1. Ajoutez la ligne suivante à la fin de la fonction submitted_form() :

    return render_template(
        'submitted_form.html',
        name=name,
        email=email,
        site=site,
        comments=comments)

    Cette ligne utilise l'interface render_template() pour afficher le modèle submitted_form.html avec les informations du formulaire envoyées.

  2. Créez les modèles form.html et submitted_form.html :

    1. Créez un dossier nommé templates dans votre répertoire racine :

      mkdir templates
      
    2. Créez form.html dans le répertoire templates de votre projet :

      <html>
        <head>
          <title>Submit a form</title>
         <link rel="stylesheet" type="text/css" href="/static/style.css">
        </head>
        <body>
          <div id="container">
            <div class="pagetitle">
              <h1>Submit a form</h1>
            </div>
            <div id="main">
              <form method="post" action="{{ url_for('submitted_form') }}">
                <label for="name">Name:</label>
                <input type="text" name="name"><br />
                <label for="email">Email address:</label>
                <input type="email" name="email"><br />
                <label for="site_url">Website URL:</label>
                <input type="url" name="site_url"><br />
                <label for="comments">Comments:</label>
                <textarea name="comments"></textarea><br />
                <input type="submit">
              </form>
            </div>
          </div>
        </body>
      </html>
      
    3. Créez submitted_form.html dans le répertoire templates de votre projet :

      <html>
       <head>
         <title>Submitted form</title>
         <link rel="stylesheet" type="text/css" href="/static/style.css">
       </head>
       <body>
         <div id="container">
           <div class="pagetitle">
             <h1>Form submitted</h1>
           </div>
           <div id="main">
             <p>Thanks for your submission, {{name}}!</p>
             <p>Here's a review of the information that you sent:</p>
             <p>
                <strong>Name</strong>: {{name}} <br>
                <strong>Email</strong>: {{email}} <br>
                <strong>Website URL</strong>: {{site}} <br>
                <strong>Comments</strong>: {{comments}}
             </p>
           </div>
         </div>
       </body>
      </html>
      

Pour en savoir plus sur l'utilisation des modèles avec Flask et Jinja2, consultez la documentation officielle de Flask.

Diffuser des fichiers statiques

Il est plus efficace de diffuser des fichiers statiques pour certains contenus, tels que les images, les fichiers CSS ou les animations Flash, qui ne sont pas générés de manière dynamique lorsqu'une page est demandée.

Créez un fichier CSS, ainsi qu'un gestionnaire pour celui-ci :

  1. Créez un dossier nommé static dans votre répertoire racine :

    mkdir static
    
  2. Créez le fichier style.css qui va modifier l'apparence des fichiers de modèle que vous venez de créer. Créez le fichier dans le dossier static de votre projet et ajoutez le style suivant :

    .pagetitle {
        color: #800080;
    }
    
  3. Le fichier app.yaml créé précédemment spécifie les répertoires static qui contiennent des fichiers statiques :

    handlers:
    - url: /static
      static_dir: static
    - url: /.*
      script: main.app

    La section handlers définit deux gestionnaires pour les URL. Lorsque le service App Engine reçoit une requête pour une URL commençant par /static, il mappe le reste du chemin d'accès avec les fichiers du répertoire static. Si un fichier approprié est détecté, son contenu est renvoyé au client.

Pour plus d'informations sur le mappage des URL et sur les autres options que vous pouvez définir dans le fichier app.yaml, consultez la documentation de référence sur app.yaml.

Tester l'application

Testez l'application à l'aide du serveur de développement local (dev_appserver.py), fourni avec le SDK.

  1. À partir du répertoire racine dans lequel se trouve le fichier de configuration app.yaml de l'application, démarrez le serveur de développement local à l'aide de la commande suivante :

    dev_appserver.py app.yaml
    

    Le serveur de développement local est désormais en cours d'exécution et écoute les requêtes envoyées sur le port 8080.

    Une erreur s'est produite ?

    1. Vous pouvez saisir l'adresse http://localhost:8080/form dans votre navigateur Web pour afficher l'application.

Exécuter le serveur de développement local (dev_appserver.py)

Pour exécuter le serveur de développement local, vous pouvez exécuter dev_appserver.py en spécifiant le chemin d'accès complet au répertoire, ou ajouter dev_appserver.py à votre variable d'environnement PATH :

  • Si vous avez installé le SDK App Engine d'origine, l'outil se trouve à l'emplacement suivant :

    [PATH_TO_APP_ENGINE_SDK]/dev_appserver.py
    
  • Si vous avez installé le SDK Google Cloud, l'outil se trouve à l'emplacement suivant :

    [PATH_TO_CLOUD_SDK]/google-cloud-sdk/bin/dev_appserver.py
    

    Conseil : Pour ajouter les outils du SDK Google Cloud à votre variable d’environnement PATH et permettre l'activation des commandes dans votre interface système, vous pouvez exécuter la commande suivante :

    [PATH_TO_CLOUD_SDK]/google-cloud-sdk/install.sh
    

Consultez la documentation de référence relative au serveur de développement local pour en savoir plus sur l'exécution de ce dernier, y compris sur la modification du numéro de port.

Effectuer une modification

Vous pouvez continuer à développer votre application alors que le serveur de développement est en cours d'exécution. Le serveur de développement recherche les modifications apportées à vos fichiers sources et les actualise, le cas échéant.

  1. Essayez dès maintenant : laissez le serveur de développement en cours d'exécution, puis modifiez templates/form.html pour remplacer le texte Submit a form contenu dans les balises <h1> par autre chose.
  2. Actualisez la page http://localhost:8080/ pour voir le résultat.

Déployer votre application

Pour mettre en ligne l'application, exécutez la commande suivante à partir du répertoire racine de votre projet où se trouve le fichier app.yaml :

gcloud app deploy

Indicateurs facultatifs :

  • Incluez l'indicateur --project pour spécifier un ID de projet GCP autre que celui initialisé par défaut dans l'outil gcloud. Exemple : --project [YOUR_PROJECT_ID]
  • Incluez l'indicateur -v pour spécifier un ID de version. À défaut, un ID est généré pour vous. Exemple : -v [YOUR_VERSION_ID]

Pour en savoir plus sur le déploiement de l'application à partir de la ligne de commande, consultez la page Déployer une application Python.

Afficher votre application

Ouvrez votre navigateur et saisissez l'adresse http://[YOUR_PROJECT_ID].appspot.com/form pour afficher l'application.

Assistance

Si vous rencontrez des problèmes lors du développement de votre application, vous pouvez obtenir l'aide de l'assistance technique et des communautés de développeurs.

Étapes suivantes

Cette page vous a-t-elle été utile ? Évaluez-la :

Envoyer des commentaires concernant…

Environnement standard App Engine pour Python 2