Créez un framework Web avec Python! (2)

Chargeons le modèle et affichons-le!

Ce n'est pas très élégant d'écrire un programme pour chaque page à afficher et d'y écrire du code HTML. Donc, je voudrais le faire jusqu'à ce que le modèle soit lu et affiché.

Obtenez la racine du projet!

Lors de la création d'un framework, je souhaite le diviser en fichiers de classe pour chaque fonction. À ce moment-là, lors de la création et de l'utilisation du chargement automatique de classe, définissez-le dans une certaine mesure dans le fichier de paramètres. Il existe également une méthode d'écriture dans un fichier ini, mais comme je souhaite exploiter le projet créé à la destination du déploiement sans le modifier, je vais spécifier le répertoire racine du projet et spécifier l'emplacement du fichier de paramètres basé sur celui-ci. Alors, décrivez d'abord l'implémentation pour spécifier le répertoire racine du projet.

La structure des répertoires cette fois est la suivante. +PROJECR_ROOT ++app | +app | + modèles (emplacement de stockage du fichier de modèle) | + index.tpl (fichier modèle) ++public | + index.py (corps du programme) | +uwsgi.ini | +uwsgi.pid |+uwsgi.log +templates + index.tpl (fichier modèle) Si vous écrivez comme suit, vous pouvez obtenir le répertoire un niveau au-dessus du répertoire public, c'est-à-dire le répertoire racine du projet.

index.py (extrait)


    project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    logger.info('project_root:' + project_root)

Vous pouvez maintenant obtenir le répertoire d'itinéraire de votre projet.

Chargez le fichier de modèle!

Maintenant que le répertoire racine du projet a été identifié, nous allons spécifier l'emplacement du fichier de configuration et du fichier modèle à partir de ce point. Le chemin complet du fichier sera décidé ultérieurement, y compris le nom du contrôleur, mais pour le moment, PROJEC_ROOT / app / templates / index.tpl est lu. Dans le Framework créé cette fois, le modèle chargé est enregistré dans un tableau, lu ligne par ligne, interprété et affiché, donc afin d'améliorer la visibilité de la source du programme, la méthode de création View et la méthode de lecture de fichier sont séparées. La méthode de lecture de fichier lit le fichier et renvoie le résultat sous forme de type de liste à la méthode de création View, la méthode de création View le concatène en une chaîne de caractères de tableau et la renvoie à la méthode d'application, et renvoie View from application à uwsgi. Le code est ci-dessous.

index.py


# index.py
# coding:utf-8
import logging
import datetime
import uuid
import os, sys

handler = logging.StreamHandler()
handler.setFormatter(logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s'))
logger = logging.getLogger()
logger.addHandler(handler)
logger.setLevel(logging.INFO)
project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

def main():
    # log
    logger.info('test-log-dayo')

def application(env, start_response):
    main()
    logger.info('project_root:' + project_root)
    start_response('200 OK', [('Content-type', 'text/html')])
    str = createView('index.tpl')
    return [str.encode("utf-8")]

def createView(file_name):
    arr = readTemplate(project_root + '/app/templates/' + file_name)
    str = ""

    for line in arr:
        str = str + line

    return str

def readTemplate(file_name):
    f = open(file_name, 'r')
    arr = []
    for line in f:
        arr.append(line)
    
    f.close()
    return arr

Avec cela, si le contenu du modèle est affiché comme "Hello World !!!" sur le navigateur, c'est réussi.

Recommended Posts

Créez un framework Web avec Python! (1)
Créez un framework Web avec Python! (2)
Faisons une interface graphique avec python.
Faisons un graphe avec python! !!
Faisons un jeu de shiritori avec Python
Faisons la voix lentement avec Python
Faisons un bot Twitter avec Python!
Faites une loterie avec Python
Remplaçons UWSC par Python (5) Faisons un robot
Faisons une discussion WEB en utilisant WebSocket avec AWS sans serveur (Python)!
[Jouons avec Python] Créer un livre de comptes de ménage
Essayez de créer un jeu simple avec Python 3 et iPhone
[Super facile] Faisons un LINE BOT avec Python.
Faisons une rupture de bloc avec wxPython
Faisons un spacon avec xCAT
Si vous voulez créer un bot discord avec python, utilisons un framework
Installer Python en tant que Framework avec pyenv
Créons un groupe gratuit avec Python
Faisons un langage simple avec PLY 1
[Python] Une application web rapide avec Bottle!
[Python] Rendons matplotlib compatible avec le japonais
Exécutez une application Web Python avec Docker
Faisons une IA à trois yeux avec Pylearn 2
Faisons un calcul de combinaison avec Python
Faisons une application WEB pour l'annuaire téléphonique avec flacon Partie 1
Faisons une application WEB pour l'annuaire téléphonique avec flacon Partie 2
Faisons une application WEB pour l'annuaire téléphonique avec flacon Partie 3
Faisons une application WEB pour l'annuaire téléphonique avec flacon Partie 4
Framework Web Django Python
Créer un bot Twitter Trend avec heroku + Python
Introduction à Tornado (1): Framework Web Python démarré avec Tornado
Essayez de créer un code de "décryptage" en Python
Lancer un serveur Web avec Python et Flask
Essayez de créer un groupe de dièdre avec Python
Web scraping avec Python (prévisions météo)
Faisons un module pour Python en utilisant SWIG
Web scraping avec Python (cours de l'action)
Extraire des données d'une page Web avec Python
[Ev3dev] Faisons un programme de contrôle à distance par Python avec le protocole RPyC
[Streamlit] Je déteste JavaScript, donc je crée une application Web uniquement avec Python
Implémentez une application simple avec Python full scratch sans utiliser de framework web.
Combinez des chaînes répétitives en une seule avec des expressions régulières Python.
Faisons un robot Discord.
Web scraping avec python + JupyterLab
Créons une application Web de conversion A vers B avec Flask! De zéro ...
Faisons un outil de veille de commande avec python
[Pratique] Créez une application Watson avec Python! # 2 [Fonction de traduction]
[Pratique] Créez une application Watson avec Python! # 1 [Discrimination linguistique]
Faisons Othello avec wxPython
Faire un point d'arrêt sur la couche c avec python
Lancer une application Web Python sur Nginx + Gunicorn avec Docker
Créez Puyopuyo AI avec Python
API Web avec Python + Falcon
Créer un bookmarklet en Python
Facilitons un peu la gestion des dépendances avec pip
[Pour jouer] Essayez de faire de Yuma un robot LINE (Python)
Écrivons python avec cinema4d.
Créer un outil de formatage CSV avec Python Pandas Py Installer