Bonjour à tout le monde
je développe depuis plusieurs années par intermittence une petite application immobiliers ( suivi quittance, édition automatique, etc....)
dans l'IDE, çà se passait bien..j'ai décidé de continuer a développer sur mon poste, et a installer l'appli en production ( serveur dédié, passage de flask à gunicorn)
Le problème est que ça ne démarre pas, pas de message d'erreur, rien a l écran, ni dans les logs
voici l'archi
REP_INSTALL
|____________.flaskenv
|____________config
|____________immo.py
|____________immo
|_____routes.py
|_____routes_listes.py
|_____routes_ajout.py
|_____....
|_____models.py
|_____templates
|________index.html
et voici les fichiers
.flaskenv :
config.py :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 FLASK_APP=immo.py #FLASK_DEBUG=on # SQL Database # Leave comment for SQLite3 database # Uncomment and update for mysql database # SQLALCHEMY_DATABASE_URI=mysql+pymysql://MYSQL_USER:MYSQL_PASSWORD@MYSQL_SERVER:3306/DATABASE # Uncomment and update for mysql database SQLALCHEMY_DATABASE_URI=mysql+pymysql://immo:PASSWORD@localhost:3306/IMMOBILIER # Directory to Install REP_INSTALL=/Projet/ma-PGI
immo.py :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 import os basedir = os.path.abspath(os.path.dirname(__file__)) class Config(object): SECRET_KEY = os.environ.get('SECRET_KEY') or 'you-will-never-guess' SQLALCHEMY_DATABASE_URI = os.environ.get('SQLALCHEMY_DATABASE_URI') or \ 'sqlite:///' + os.path.join(basedir, 'immo.db') SQLALCHEMY_TRACK_MODIFICATIONS = False class App_Config(object): REP_CONTRAT_LOCATION = os.path.join(basedir, "Fichiers/Contrats_de_locations/") REP_QUITTANCES = os.path.join(basedir, "Fichiers/Quittances/") REP_MODELES = os.path.join(basedir, "Fichiers/Modeles/") REP_LOG = os.path.join(basedir, "Logs/") FICHIER_LOG = os.path.join(basedir, REP_LOG + "immo.log") NIVEAU_LOG = "INFO" # ou WARN ou DEBUG ou ERROR Message_IHM = ""
immo/__init__.py
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 import config from immo import immo as application, db from immo.models import Appartements, Locations @immo.shell_context_processor def make_shell_context(): return {'db': db, 'Appartements': Appartements, 'Locataire': Locations} app = application
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 from flask import Flask from flask_sqlalchemy import SQLAlchemy from flask_migrate import Migrate from config import Config, App_Config immo = Flask(__name__) immo.config.from_object(Config) immo.config.from_object(App_Config) db = SQLAlchemy(immo) migrate = Migrate(immo, db) from immo import routes, routes_ajouts, routes_init, routes_listes, routes_divers, routes_modifications, models
immo/routes.py
immo/models.py
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 from flask import render_template from immo import immo from config import App_Config from immo.models import Appartements,Encaissements from flask_sqlalchemy import SQLAlchemy import logging import locale locale.setlocale(locale.LC_TIME, '') logging.basicConfig(filename=App_Config.FICHIER_LOG, level=logging.INFO, format='%(asctime)s -- %(name)s -- %(levelname)s -- %(message)s') logging.getLogger('sqlalchemy.engine').setLevel(logging.INFO) #db = SQLAlchemy(immo) @immo.route('/') @immo.route('/index') def index(): Titre_Page = "ma PGI :: Accueil" db = SQLAlchemy(immo) print("toto") nb_a = db.session.query(Appartements).count() nb_a_libre=db.session.query(Appartements).filter(Appartements.LIBRE==0).count() print(nb_a,nb_a_libre) nb_e = db.session.query(Encaissements).count() nb_loyers = db.session.query(Encaissements).filter(Encaissements.TYPE_ENCAISSEMENT=='Loyer et Charges').count() print(nb_e, nb_loyers) return render_template('index.html', TITRE_PAGE=Titre_Page,NB_APPARTEMENTS=nb_a,NB_APPARTEMENTS_LIBRES=nb_a_libre, NB_ENCAISSEMENTS=nb_e, NB_LOYERS=nb_loyers, Affichage_Message_Information="True", Message_IHM=App_Config.Message_IHM)
Erreur dans le navigateur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 from immo import db from dataclasses import dataclass class Appartements(db.Model): __tablename__ = "T_APPARTEMENTS" id = db.Column(db.Integer, primary_key=True) NUMERO = db.Column(db.Integer, ) NOM_VOIE = db.Column(db.String(10), ) VOIE = db.Column(db.String(50)) CP = db.Column(db.Integer) VILLE = db.Column(db.String(50)) RESIDENCE = db.Column(db.String(30)) NOM_PROPRIETAIRE = db.Column(db.String(50)) DATE_ACHAT = db.Column(db.Date) LIBRE = db.Column(db.Integer) def __repr__(self): return str(self.id) def save(self): db.session.add(self) db.session.commit() def update_data(self, new_data): self.data = new_data @classmethod def get_by_id(cls, id): return cls.query.filter_by(id=id).first() def toDICT(self): cls_dict = {} cls_dict['_id'] = self.id cls_dict['data'] = self.data return cls_dict def toJSON(self): return self.toDICT() class Locations(db.Model): __tablename__ = "T_LOCATIONS"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Internal Server Error The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application.
Ce code va peut-être vous choquer...mais j'apprends doucement, sur mon temps libre, alors soyez indulgents ;-)
Il y a 6 mois, il y avait plein de requêtes sql, j'ai décidé de passer avec SQL Alchemy, pour apprendre....bref, j'ai fait des choses pour améliorer et sécuriser , je me suis documenté, du mieux que mon anglais défaillant me le permet
Merci d'avance à ceux qui voudront/pourront m'aider
Olivier
Partager