#! /usr/bin/python
# -*- coding:utf-8 -*-
from flask import Flask, request, render_template, redirect, flash
= Flask(__name__)
app "TEMPLATES_AUTO_RELOAD"] = True
app.config[= 'une cle(token) : grain de sel(any random string)'
app.secret_key
## à ajouter
from flask import session, g
import pymysql.cursors
def get_db():
if 'db' not in g:
= pymysql.connect(
g.db ="localhost", # à modifier
host="login", # à modifier
user="secret", # à modifier
password="BDD_votrelogin", # à modifier
database='utf8mb4',
charset=pymysql.cursors.DictCursor
cursorclass
)# à activer sur les machines personnelles :
activate_db_options(db)return g.db
@app.teardown_appcontext
def teardown_db(exception):
= g.pop('db', None)
db if db is not None:
db.close()
def activate_db_options(db):
= db.cursor()
cursor # Vérifier et activer l'option ONLY_FULL_GROUP_BY si nécessaire
"SHOW VARIABLES LIKE 'sql_mode'")
cursor.execute(= cursor.fetchone()
result if result:
= result['Value'].split(',')
modes if 'ONLY_FULL_GROUP_BY' not in modes:
print('MYSQL : il manque le mode ONLY_FULL_GROUP_BY') # mettre en commentaire
"SET sql_mode=(SELECT CONCAT(@@sql_mode, ',ONLY_FULL_GROUP_BY'))")
cursor.execute(
db.commit()else:
print('MYSQL : mode ONLY_FULL_GROUP_BY ok') # mettre en commentaire
# Vérifier et activer l'option lower_case_table_names si nécessaire
"SHOW VARIABLES LIKE 'lower_case_table_names'")
cursor.execute(= cursor.fetchone()
result if result:
if result['Value'] != '0':
print('MYSQL : valeur de la variable globale lower_case_table_names differente de 0') # mettre en commentaire
"SET GLOBAL lower_case_table_names = 0")
cursor.execute(
db.commit()else :
print('MYSQL : variable globale lower_case_table_names=0 ok') # mettre en commentaire
cursor.close()
L’instruction @app.teardown_appcontext
permet d’appeler
la fonction close_connection
lorsque que le serveur a fini
de renvoyer une réponse.
Il faut recréer et fermer la connexion à chaque requête HTTP,
sinon il y a un risque de fuite de mémoire
Exemple de code pour ajouter/modifier/supprimer et afficher le contenu de la table “type_article” et début du CRUD sur la table “article”
Complèter sur le même principe, le CRUD pour ajouter/modifier/supprimer et afficher les données de la table article
Pour le “DELETE”, il est possible de faire comme avec le “CRUD”
sur les types d’articles
on désire faire une interface avec des filtres sur les articles