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éerequest.method
renvoie la méthode HTTP utiliséerequest.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’objet
request
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.