:orphan: ================================================== TP n°4 : Une application Flask plus intéressante ================================================== .. role:: en Mise en place ============= * Créez un `environnement virtuel <../annexes/a1_venv>`:doc:. * Installez-y ``flask`` avec la commande : .. code-block:: bash pip install flask * Téléchargez la base de données `ensembl_hs63_simple.sqlite <../_static/ensembl_hs63_simple.sqlite>`_, dont le schéma relationnel vous est donné ci-dessous : .. figure:: ../_static/schema_relationnel.png :target: ../_static/schema_relationnel.png Schéma de la base *ensembl_hs63_simple* (cliquez pour agrandir) Cette base est un sous-ensemble de la base de données `Ensembl `_. Il s'agit d'une base de données d’annotations de génomes contenant des informations sur les gènes, leurs transcrits, ainsi que de nombreux autres renseignements comme la fonction des gènes ou encore les comparaisons entre plusieurs génomes. Votre travail ============= Créez une application Flask répondant aux routes suivantes : ``/`` Une page de garde affichant la liste (triée par ordre alphabétique) des ``atlas_organism_part`` de la table ``Expression``. Chaque nom est un lien vers la liste de gènes correspondante (cf. ``/parts//genes`` ci-dessous). ``/parts//genes`` Une page affichant les identifiants (``ensembl_gene_id``) et les noms (``associated_gene_name``) des gènes associées à cette partie d'organisme. Notez que l'association se fait *via* la table ``Transcript`` ; voici une requête SQL permettant de récupérer cette information⋅: .. code-block:: sql SELECT DISTINCT g.ensembl_gene_id, associated_gene_name FROM Genes as g NATURAL JOIN Transcripts as t NATURAL JOIN Expression as e WHERE atlas_organism_part = ? ORDER BY g.ensembl_gene_id L'identifiant et le nom de chaque gène doivent être des liens vers la fiche individuelle de ce gène (cf. ``/genes/`` ci-dessous). ``/genes/`` La fiche individuelle du gène ayant l'identifiant ``id``. Elle doit contenir * une section présentant toutes les informations données par ligne correspondante de la table ``Genes``, * une section présentant la liste des transcrits de ce gène (avec leur identifiant, et leurs position de début et de fin), * une section avec la liste des parties d'organismes reliés (*via* les transcrits) à ce gène (avec un lien vers la page ``/parts//genes`` correspondante. Utilisez les `templates`:en: pour avoir une mise en page homogène sur toutes les pages du site, avec une feuille de style définie comme une ressource statique. Pour aller plus loin ==================== Vous pouvez augmenter votre site avec les routes suivantes. ``/genes//edit`` un formulaire permettant de *modifier* un gène existant dans la base, accessible depuis la fiche individuelle du gène. ``/transcripts/`` une fichie individuelle de transcrit, affichant : * toutes les informations données par ligne correspondante de la table ``Transcripts``, * un lien vers la fiche individuelle du gène correspondant à ce transcrit (``/genes/``), * une liste des parties d'organismes (avec des liens) associés à ce transcrit en particulier.