def stuff_edit(): # OM 2020.04.07 Les données sont affichées dans un formulaire, l'affichage de la sélection # d'une seule ligne choisie par le bouton "edit" dans le formulaire "user_afficher.html" obj_actions_user = GestionUser() obj_actions_state_stuff = GestionStateStuff() obj_actions_type_payment = GestionTypePayment() data_user = obj_actions_user.user_afficher_data() data_state_stuff = obj_actions_state_stuff.state_stuff_afficher_data( valeur_order_by='ASC', id_state_stuff_sel=0) data_type_payment = obj_actions_type_payment.type_payment_afficher_data( valeur_order_by='ASC', id_type_payment_sel=0) if request.method == 'GET': try: # Récupérer la valeur de "id_user" du formulaire html "user_afficher.html" # l'utilisateur clique sur le lien "edit" et on récupére la valeur de "id_user" # grâce à la variable "id_user_edit_html" # <a href="{{ url_for('user_edit', id_user_edit_html=row.id_user) }}">Edit</a> id_stuff_edit = request.values['id_stuff_edit_html'] # Pour afficher dans la console la valeur de "id_user_edit", une façon simple de se rassurer, # sans utiliser le DEBUGGER print(id_stuff_edit) # Constitution d'un dictionnaire et insertion dans la BD valeur_select_dictionnaire = {"value_id_stuff": id_stuff_edit} # OM 2020.04.09 Objet contenant toutes les méthodes pour gérer (CRUD) les données. obj_actions_stuff = GestionStuff() # OM 2019.04.02 La commande MySql est envoyée à la BD data_id_stuff = obj_actions_stuff.edit_stuff_data( valeur_select_dictionnaire) print("dataIdStuff ", data_id_stuff, "type ", type(data_id_stuff)) # Message ci-après permettent de donner un sentiment rassurant aux utilisateurs. flash(f"Editer le stuff !!!") except (Exception, pymysql.err.OperationalError, pymysql.ProgrammingError, pymysql.InternalError, pymysql.IntegrityError, TypeError) as erreur: # On indique un problème, mais on ne dit rien en ce qui concerne la résolution. print("Problème avec la BD ! : %s", erreur) # OM 2020.04.09 On dérive "Exception" dans "MaBdErreurConnexion" fichier "erreurs.py" # Ainsi on peut avoir un message d'erreur personnalisé. raise MaBdErreurConnexion( f"RGG Exception {msg_erreurs['ErreurConnexionBD']['message']}" f"et son status {msg_erreurs['ErreurConnexionBD']['status']}") return render_template("stuff/stuff_edit.html", data_user=data_user, data_state_stuff=data_state_stuff, data_type_payment=data_type_payment, data=data_id_stuff)
def user_add(): # OM 2019.03.25 Pour savoir si les données d'un formulaire sont un affichage # ou un envoi de donnée par des champs utilisateurs. obj_actions_gender = GestionGenders() data_genders = obj_actions_gender.gender_afficher_data( valeur_order_by='ASC', id_genders_sel=0) if request.method == "POST": try: # OM 2020.04.09 Objet contenant toutes les méthodes pour gérer (CRUD) les données. obj_actions_user = GestionUser() # OM 2020.04.09 Récupère le contenu du champ dans le formulaire HTML "user_add.html" firstname_user = request.form['firstname_user_html'] lastname_user = request.form['lastname_user_html'] mail = request.form['mail_html'] phone = request.form['phone_html'] address = request.form['address_html'] city = request.form['city_html'] npa = request.form['npa_html'] gender = request.form['gender_select'] date_user = request.form['date_user_html'] # OM 2019.04.04 On ne doit pas accepter des valeurs vides, des valeurs avec des chiffres, # des valeurs avec des caractères qui ne sont pas des lettres. # Accepte le trait d'union ou l'apostrophe, et l'espace entre deux mots, mais pas plus d'une occurence. if not re.match( "^([A-Z]|[a-z\u00C0-\u00FF])[A-Za-z\u00C0-\u00FF]*['\\- ]?[A-Za-z\u00C0-\u00FF]+$", firstname_user): # OM 2019.03.28 Message humiliant à l'attention de l'utilisateur. flash( f"Une entrée...incorrecte !! Pas de chiffres, de caractères spéciaux, d'espace à double, " f"de double apostrophe, de double trait union et ne doit pas être vide.", "Danger") # On doit afficher à nouveau le formulaire "user_add.html" à cause des erreurs de "claviotage" return redirect(url_for("user_add")) else: # Constitution d'un dictionnaire et insertion dans la BD valeurs_insertion_dictionnaire = { "value_firstname_user": firstname_user, "value_lastname_user": lastname_user, "value_mail": mail, "value_phone": phone, "value_address": address, "value_city": city, "value_npa": npa, "value_gender": gender, "value_date_user": date_user } obj_actions_user.add_user_data(valeurs_insertion_dictionnaire) # OM 2019.03.25 Les 2 lignes ci-après permettent de donner un sentiment rassurant aux utilisateurs. flash(f"Données insérées !!", "Sucess") print(f"Données insérées !!") # On va interpréter la "route" 'user_afficher', car l'utilisateur # doit voir le nouveau firstname_user qu'il vient d'insérer. return redirect(url_for('user_afficher')) # OM 2020.04.16 ATTENTION à l'ordre des excepts très important de respecter l'ordre. # except pymysql.err.IntegrityError as erreur: # OM 2020.04.09 On dérive "pymysql.err.IntegrityError" dans "MaBdErreurDoublon" fichier "erreurs.py" # Ainsi on peut avoir un message d'erreur personnalisé. #raise MaBdErreurDoublon( # f"RGG pei {msg_erreurs['ErreurDoublonValue']['message']} et son status {msg_erreurs['ErreurDoublonValue']['status']}") # OM 2020.04.16 ATTENTION à l'ordre des excepts très important de respecter l'ordre. #except (pymysql.err.OperationalError, # pymysql.ProgrammingError, # pymysql.InternalError, # TypeError) as erreur: # flash(f"Autre erreur {erreur}") #raise MonErreur(f"Autre erreur") # OM 2020.04.16 ATTENTION à l'ordre des excepts très important de respecter l'ordre. except Exception as erreur: # OM 2020.04.09 On dérive "Exception" dans "MaBdErreurConnexion" fichier "erreurs.py" # Ainsi on peut avoir un message d'erreur personnalisé. raise MaBdErreurConnexion( f"RGG Exception {msg_erreurs['ErreurConnexionBD']['message']} et son status {msg_erreurs['ErreurConnexionBD']['status']}" ) # OM 2020.04.07 Envoie la page "HTML" au serveur. return render_template("user/user_add.html", data_genders=data_genders)