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