• 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 01/02/2019

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

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

 

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. 

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érer 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

Ca 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 '%s' % 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.

Chercher 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

Code du chapitre

Retrouvez le code du chapitre à cette adresse.

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