• 8 heures
  • Moyenne

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 18/02/2022

Créez une page de résultat grâce aux URL dynamiques

Notre page de résultats est assez avancée ! Mais il manque deux aspects essentiels :

  • récupérer les informations de l'utilisateur

  • chercher la description lui correspondant.

Nous pourrions aller assez loin dans l'analyse du profil d'un utilisateur. En soi, Facebook permet d'accéder à toutes les informations d'un profil si l'utilisateur donne son accord : adresse e-mail, amis, pages aimées...

Pour ce cours, faisons simple : trouvons une description au hasard mais adaptée au genre de la personne.

Vous devez par conséquent récupérer les informations suivantes :

  • Prénom, pour personnaliser la page de résultats,

  • Identifiant de son profil, pour générer une image de profil,

  • Genre, pour filtrer les descriptions correspondantes. 

Découvrez l'URL dynamique

Avant de voir comment récupérer ces informations de la part de Facebook, intéressez-vous à la page de résultats. Vous allez passer ces informations en paramètres de l'url. Par exemple :

localhost:5000/result?first_name=Céline&id=1933433063608371&gender=female

Décomposons cette url :

  • localhost:5000 : nom de domaine et port utilisé.

  • /result : schéma utilisé pour identifier la route.

  • ? : séparateur entre le schéma et les paramètres.

  • first_name=Céline : association entre le nom du paramètre (first_name) et sa valeur (Céline).

  • & : séparateur entre chaque paramètre.

C'est ce que nous appelons une URL dynamique car les valeurs des paramètres sont amenées à varier.

Récupérez les paramètres d'une URL dynamique

Paramètres optionnels

Flask contient l'objet request qui représente la requête exécutée par le client.

Il contient de nombreux paramètres intéressants :

  • request.path renvoie la route demandée

  • request.method renvoie la méthode HTTP utilisée

  • request.args renvoie un dictionnaire contenant les paramètres présents dans l'URL.

Utilisez ce dernier dans la vue.

views.py

from flask import Flask, render_template, url_for, request

...

@app.route('/result/')
def result():
    description = """
        Toi, tu n'as pas peur d'être seul ! Les grands espaces et les aventures sont faits pour toi. D'ailleurs, Koh Lanta est ton émission préférée ! Bientôt tu partiras les cheveux au vent sur ton radeau. Tu es aussi un idéaliste chevronné. Quelle chance !
    """
    gender = request.args.get('gender')
    user_name = request.args.get('first_name')
    uid = request.args.get('id')
    profile_pic = 'http://graph.facebook.com/' + uid + '/picture?type=large'
    return render_template('result.html',
                            user_name=user_name,
                            user_image=profile_pic,
                            description=description)

Naviguez sur l'url :

localhost:5000/result?first_name=Céline&id=1933433063608371&gender=female

Ça fonctionne !

En savoir plus dans la documentation officielle de Flask

Je ne comprends pas bien comment tu génères l'image de profil.

Les photos de profil de tous les utilisateurs de Facebook sont publiques. Il est possible de les voir en plusieurs formats à choisir directement dans l'URL. Lire la documentation sur Facebook.

Paramètres obligatoires

Vous souvenez-vous de l'architecture REST ? Si vous avez lu le cours de Sarah, vous savez que l'URL d'une ressource peut ressembler à celle-ci : /contents/1.

Mais comment accéder à la partie variable ? Nous n'avons ici pas de point d'interrogation en guise de séparateur.

L'opération va être légèrement différente. Plutôt que de faire appel à l'objet request, vous allez modifier directement la route impactée :

views.py

@app.route('/contents/<content_id>/')
def content(content_id):
    return content_id

Indiquez les parties spéciales d'une url en ajoutant <variable>. Cette partie est alors passée en tant qu'argument de la vue.

Cherchez dans la base de données les informations adéquates

La dernière étape de ce chapitre consiste à trouver une description au hasard en fonction du genre de l'utilisateur.

Commencez par trouver une description au hasard !

Créez un nouveau fichier, utils.py, qui contiendra les objets qui ne sont pas liés à Flask. Dans le chapitre suivant vous y ajouterez une nouvelle classe pour générer une image à partir d'une description.

utils.py

import random

from fbapp.models import Content, Gender

def find_content(gender):
    contents = Content.query.filter(Content.gender == Gender[gender]).all()
    return random.choice(contents)

Importez le script dans views.py :

views.py

...
from .utils import find_content
...

Dans la vue result, vous pouvez maintenant trouver une description au hasard en fonction du genre :

views.py

@app.route('/result/')
def result():
    ...
    description = find_content(gender).description

Récupérez le code du chapitre

Retrouvez le code du chapitre à cette adresse.

En résumé

  • Pour personnaliser le contenu d’une page web, on utilise une URL dynamique qui contient des paramètres et des valeurs qui peuvent changer

  • Ces paramètres peuvent être optionnels ou obligatoires

  • Pour récupérer ces valeurs dans notre application, on utilise l’objetrequest de Flask ou la variable intégrée à la route définie par< > 

Votre application affiche désormais une page de résultat dynamique. Voyons si vous avez bien intégré ces notions grâce au quizz qui suit. Puis nous verrons ensemble comment récupérer les informations d’un utilisateur avec Facebook.

Exemple de certificat de réussite
Exemple de certificat de réussite