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.
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=femaleDé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.
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.
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_idIndiquez les parties spéciales d'une url en ajoutant <variable>. Cette partie est alors passée en tant qu'argument de la vue.
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).descriptionRetrouvez le code du chapitre à cette adresse.

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.