API Flask Organiser ses class dans des fichiers
Résolu/Fermé
A voir également:
- API Flask Organiser ses class dans des fichiers
- Wetransfer gratuit fichiers lourd - Guide
- Renommer des fichiers en masse - Guide
- Explorateur de fichiers - Guide
- Fichiers epub - Guide
1 réponse
Pour ceux qui tomberaient sur le même os, j'ai trouvé une solution qui semble bien fonctionner. Voici la structure de mes fichiers:
myapp1/
myapp1/app.py
myapp1/__init__.py
myapp1/resources/
myapp1/resources/cars.py
myapp1/resources/msgs.py
myapp1/resources/users.py
myapp1/resources/db.py
myapp1/resources/__init__.py
Le dossier 'myapp1/resources/' contient mes différents fichiers représentant chacun une class particulière.
Je place également des fichiers '__init__.py' dans chaque dossier, je n'ai pas bien compris le fonctionnement de ces fichiers '__init__.py' mais il semblerait que cela permette à Python de traiter mes dossiers comme des Packages. Pour le moment ces fichiers sont vides, le simple fait qu'ils existent semble permettre cette histoire de Packages (à vérifier).
On a donc 3 class:
-cars
-users
-msgs
Le fichier db.py est un fichier de configuration pour communiquer avec la base de données. Il est inclus dans les class qui utilisent la BDD ainsi que dans le fichier principal 'myapp1/app.py '
Contenu de myapp1/app.py :
Contenu de myapp1/resources/cars.py :
Contenu de myapp1/resources/db.py :
Voilà tout, ce n'est peut-être pas la bonne méthode, sur ma route j'ai également croisé des réponses sur des forums qui préconisaient d'utiliser des " blueprints".
Afin d'ajouter des nouvelles class, il suffit de créer un nouveau fichier dans 'myapp1/resources/' puis de l'importer dans 'myapp1/app.py'. Enfin, il faut ajouter une ligne indiquant comment appeler la ressource depuis l'URL.
myapp1/
myapp1/app.py
myapp1/__init__.py
myapp1/resources/
myapp1/resources/cars.py
myapp1/resources/msgs.py
myapp1/resources/users.py
myapp1/resources/db.py
myapp1/resources/__init__.py
Le dossier 'myapp1/resources/' contient mes différents fichiers représentant chacun une class particulière.
Je place également des fichiers '__init__.py' dans chaque dossier, je n'ai pas bien compris le fonctionnement de ces fichiers '__init__.py' mais il semblerait que cela permette à Python de traiter mes dossiers comme des Packages. Pour le moment ces fichiers sont vides, le simple fait qu'ils existent semble permettre cette histoire de Packages (à vérifier).
On a donc 3 class:
-cars
-users
-msgs
Le fichier db.py est un fichier de configuration pour communiquer avec la base de données. Il est inclus dans les class qui utilisent la BDD ainsi que dans le fichier principal 'myapp1/app.py '
Contenu de myapp1/app.py :
from flask import Flask from flask.ext.mysql import MySQL from flask import jsonify from flask_restful import Api, Resource, reqparse from resources.users import User from resources.msgs import Msg from resources.cars import Car from resources.db import app, api api.add_resource(User, "/user/<string:name>") api.add_resource(Msg, "/msg/<string:name>") api.add_resource(Car, "/car/<string:name>") #app.run(debug=True) app.run(host='0.0.0.0')
Contenu de myapp1/resources/cars.py :
from flask_restful import Resource from resources.db import mysql class Car(Resource): def get(self, name): conn = mysql.connect() cursor =conn.cursor() cursor.callproc('get_car_from_id',(name)) data = cursor.fetchall() if(cursor.rowcount < 1): return "no lines... oups.. rien trouve :(" return data
Contenu de myapp1/resources/db.py :
from flask import Flask from flask.ext.mysql import MySQL from flask_restful import Api, Resource, reqparse app = Flask(__name__) api = Api(app) mysql = MySQL() # MySQL configurations app.config['MYSQL_DATABASE_USER'] = "dbuser" app.config['MYSQL_DATABASE_PASSWORD'] = "dbpass" app.config['MYSQL_DATABASE_DB'] = "app_myapp" app.config['MYSQL_DATABASE_HOST'] = "localhost" mysql.init_app(app)
Voilà tout, ce n'est peut-être pas la bonne méthode, sur ma route j'ai également croisé des réponses sur des forums qui préconisaient d'utiliser des " blueprints".
Afin d'ajouter des nouvelles class, il suffit de créer un nouveau fichier dans 'myapp1/resources/' puis de l'importer dans 'myapp1/app.py'. Enfin, il faut ajouter une ligne indiquant comment appeler la ressource depuis l'URL.
api.add_resource(...)