Automatiser une création de compte sur un programme [Résolu]

Signaler
Messages postés
58
Date d'inscription
mercredi 23 octobre 2019
Statut
Membre
Dernière intervention
5 janvier 2020
-
Frizti
Messages postés
58
Date d'inscription
mercredi 23 octobre 2019
Statut
Membre
Dernière intervention
5 janvier 2020
-
Bonjour, je travail sur un programme de terminal ou il faudrait se connecter avec un compte qu'on aura créé au préalable pour y accéder, je me demandais si il était possible sur le code si-dessous d'ajouter une fonction qui pourrait automatiser cette création de compte (tu met ton pseudo et ton mdp et sa s'enregistre tout seul même après fermeture du programme)
le code :
#coding:utf-8
import sys
progLaunch = True
i_d = "Frizti"
m_d_p = "jamesbond33"
id2 = ""

print("connexion au terminal...")
print("La connection s'initialise...")
print("chargement...")
print("28%")
print("43%")
print("72%")
print("88%")
print("100%. Chargement terminé !")

user_id = input("Entrez votre identifiant (si vous n'avez pas de  compte, entrez '?') : ")
user_password = input("Entrez votre mot de passe (si vous n'avez pas de  compte, entrez '?') : ")

if user_id == i_d and user_password == m_d_p:
    print("Vous etes connecté, bienvenue", i_d)
elif user_id == "?" and user_password == "?":
    id2 = input("Veuillez entrer un pseudonyme : ")
    mdp2 = input("Veuillez entrer un mot de passe : ")
    input("Veuillez maintenant contacter un administrateur afin qu'il vous enregistre \nune fois cela fait, appuyez sur 'entrée' : ")
    print("Bienvenue dans le terminal {}, vous etes maintenant enregistré !".format(id2))
else:
    print("Mot de passe ou nom d'utilisateur incorrect, veuillez réessayer ultèrieurement")
    input("Appuyez sur 'entrée' pour quitter ")
    sys.exit(0)
       

print("Dévérouillage terminé")

print("")
terLaunch = True
while terLaunch:
    choixMenu = input("> ")

    if choixMenu == "again":
        continue
    elif choixMenu == "quit":
        progLaunch = False
        terLaunch = False
    elif choixMenu == "hello":
        print("Bonjour :) !")
        continue
    elif choixMenu == "test":
        print("Analyse de 147 éléments en cours... Analyse terminée ! Aucun problème détecté .")
        continue
    elif choixMenu == "add-on":
        print("n/a aucun add-on installé pour l'instant")
        continue
    elif choixMenu == "help":
        print("Liste des commandes : \nagain : ne rien faire et recommencer \nquit : quitter \nhello : faire dire bonjour au programme \ntest : analyser le programme \nadd-on : consulter les add-ons installés et opérationels \nhelp : afficher ceci \ncalcul : utiliser la calculatrice")
    elif choixMenu == "calcul":
        chiffre1 = input("Entrez le premier chiffre a calculer : ")
        chiffre1 = int(chiffre1)
        chiffre2 = input("Entrez le second chiffre : ")
        chiffre2 = int(chiffre2)
        calcul1 = input("Comment voulez vous utiliser ces nombres ? (+ additionner, - soustraire, x multiplier, / diviser, % le reste d'une division) : ")
        print("Résultat :")
        if calcul1 == ("+"):
            chiffre1 = chiffre1 + chiffre2
        elif calcul1 == ("-"):
            chiffre1 = chiffre1 - chiffre2
        elif calcul1 == ("x"):
            chiffre1 = chiffre1 * chiffre2
        elif calcul1 == ("/"):
            chiffre1 = chiffre1 / chiffre2
        elif calcul1 == ("%"):
            chiffre1 = chiffre1 % chiffre2
        print(chiffre1)
    else:
        print("Commande introuvable")


input("Aurevoir...(appuyez sur entrée)")

16 réponses

Messages postés
9425
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 janvier 2020
500
bonjour, je pense que c'est possible.
Enregistrer des données permanentes se fait sur le disque dur (ou autre support physique).

Donc, il t’incombe d'enregistrer login et mot de passe dans un fichier ou éventuellement une base de données, comme tu débutes le choix d'un simple fichier semble le plus simple.
Et ensuite lorsqu'un utilisateur voudra se connecter, il suffira de vérifier que le couple login, password est présent dans ton fichier, et si tu ne veux pas que l'on puisse lire directement les valeurs de ton fichier, tu pourrais également utiliser des fonctions de hash.

Attention, avant d'enregistrer un nouvel utilisateur, il faudra vérifier que le pseudo choisi n'existe pas déjà dans ton fichier.
Messages postés
58
Date d'inscription
mercredi 23 octobre 2019
Statut
Membre
Dernière intervention
5 janvier 2020
4
D'accord, merci mais comment dois-je faire pour que mon programme accède à ce dit fichié et comment configurer celui-ci ?
Ce fichier, c'est toi qui dois le créer, ouvrir un fichier se fait avec open en python.
Et dedans tu auras juste des lignes, avec un séparateur nom, séparateur, mdp, un fichier csv en gros.

riri,mdp_de_riri
fifi,mdp_de_fifi


Il y a d'autres format de fichier que tu pourrais aussi utiliser, json, xml (plus compliqué).
Messages postés
58
Date d'inscription
mercredi 23 octobre 2019
Statut
Membre
Dernière intervention
5 janvier 2020
4
D'accord, et comment dois-je faire pour que les informations présentes dans ce fichier soient utilisées ?
yg_be
Messages postés
9425
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 janvier 2020
500
peut-être commencer avec des exercices plus simples?
Frizti
Messages postés
58
Date d'inscription
mercredi 23 octobre 2019
Statut
Membre
Dernière intervention
5 janvier 2020
4 > yg_be
Messages postés
9425
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 janvier 2020

tu sais comment je peux définir les informations du fichier texte en tant que identifiants et mdp ?
Messages postés
58
Date d'inscription
mercredi 23 octobre 2019
Statut
Membre
Dernière intervention
5 janvier 2020
4
je ne débute pas, je suis justement e n train d'apprendre a utiliser des fichiers textes dans un programme
Un programme, c'est aussi faire des fonctions.

Admettons, un fichier users.txt
Avec dedans 2 enregistrements.
toto:123456
lulu:roxor


On écrit ensuite quelques fonctions permettant de travailler.

USERS_FILE = 'users.txt'


def user_save(user_name, user_password):
    with open(USERS_FILE, 'a') as f:
        f.write('{}:{}\n'.format(user_name, user_password))


def users_load():
    users = []
    with open(USERS_FILE) as f:
        for line in f:
            users.append(line.rstrip().split(':'))
    return users


def user_exists(user_name):
    users = users_load()
    for name, _ in users:
        if name == user_name:
            return True
    return False


def user_connect(user_name, user_password):
    users = users_load()
    for name, password in users:
        if name == user_name:
            if password == user_password:
                return True
            break
    return False


Puis on effectue quelques tests pour voir si tout fonctionne comme on veut.

print(user_connect('toto', '1234'))
print(user_connect('toto', '123456'))
print(user_exists('lulu'))
print(user_connect('lulu', 'roxor'))

name = 'loulou'
password = '42çarox'
if not user_exists(name):
    user_save(name, password)
    print(name, 'saved')
else:
    print('username', name, 'exists')

print(user_connect(name, '123456'))
print(user_connect(name, password))


Et voilà, tu vois quelque chose de compliqué là-dedans ?

Tu peux aussi mettre d'autres parties de ton programme dans des fonction, le message de connexion au terminal, le menu, etc.

En faisant ça, ton script sera beaucoup plus limpide.
Messages postés
58
Date d'inscription
mercredi 23 octobre 2019
Statut
Membre
Dernière intervention
5 janvier 2020
4
ça marche pas pour moi, a moins que je fasse la mauvaise technique ou le mauvais placement, j'ai tout mis dans un seul et même programme (a part les utilisateurs bien sur)
Tu plaisantes ?

Le script que je t'ai mis n'est pas à placer comme ça dans ton fichier, il est à lire, comprendre, cela fait tu pourras intégrer cela à ton script.

De toute façon, je crois qu'il faut que tu repasses par la case tuto, là tu es ivre et en excès de vitesse, tu perds le contrôle de ton véhicule, tu vas bientôt te crasher dans le pilier de pont un peu plus loin.
Frizti
Messages postés
58
Date d'inscription
mercredi 23 octobre 2019
Statut
Membre
Dernière intervention
5 janvier 2020
4 > trifou
Mince, je croyais que tu allais comprendre le sarcasme, mais bon.
Messages postés
58
Date d'inscription
mercredi 23 octobre 2019
Statut
Membre
Dernière intervention
5 janvier 2020
4
Tu m'a quand-même bien aidé merci !
Messages postés
58
Date d'inscription
mercredi 23 octobre 2019
Statut
Membre
Dernière intervention
5 janvier 2020
4
OwO j'ai un nouveau problème : je n'arrive pas a supprimer un utilisateur, quelle commande dois-je utiliser ? (désolé mais j'ai un piètre niveau en utilisation de fichiers externes au programme)
Ton problème se situe de savoir comment supprimer un élément d'une liste, puis aplatir cette liste pour l'enregistrer dans le fichier.

On peut supprimer un élément d'une liste avec list.pop, ou encore en utilisant les slices.
Frizti
Messages postés
58
Date d'inscription
mercredi 23 octobre 2019
Statut
Membre
Dernière intervention
5 janvier 2020
4 > trifou
Merci ! C'est plus pratique maintenant !
Messages postés
58
Date d'inscription
mercredi 23 octobre 2019
Statut
Membre
Dernière intervention
5 janvier 2020
4
Ah ! non en fait, je croyais que ça marchait comme il n'y avait pas de message d'erreur mais ça ne marche pas.
je cherche a faire ça avec cette commande:
u = input("Entrez ceci : '<pseudo>:<mdp>' : ")
            users_file.remove("{}".format(u))
            if u not in users_file:
                print("Suppression effectuée avec succès !")
            else:
                print("Echec de la supression.")

mais ça ne marche pas, pouvez-vous m'aider ?
Bonjour,

Lorsqu'on cherche à supprimer un utilisateur, donc une opération d'administration, on se fiche du mot de passe, d'ailleurs un administrateur n'a pas à connaître les mots de passes des utilisateurs. La seule chose dont on dispose est (ici) le pseudo.

Donc on charge le fichier dans une liste (avec readlines), on parcourt cette liste, on scinde la ligne par le séparateur de valeurs, on regarde si le premier élément vaut le pseudo à supprimer et on supprime la ligne dans ce cas.
Cette opération effectuée, on écrit la liste modifiée dans le fichier (avec writelines).

Mais généralement, on ne supprime pas vraiment un utilisateur, on rend plutôt un compte inactif, par exemple ajouter un 3ème élément dans ton fichier users avec pour valeur 0 ou 1, 0 signifiera que le compte est inactif.
Frizti
Messages postés
58
Date d'inscription
mercredi 23 octobre 2019
Statut
Membre
Dernière intervention
5 janvier 2020
4 > trifou
Ah ! Donc je dois présenter comme ça pour rendre un compte inactif ?
user:mdp:0
Messages postés
58
Date d'inscription
mercredi 23 octobre 2019
Statut
Membre
Dernière intervention
5 janvier 2020
4
euh la commande ne marche pas à moins que je me trompe
(je pense que je me trompe)
le code:
        	fic = open("105 12.46.13.txt", "r")
        	print("Liste des utilisateurs :")
        	content = fic.read()
        	print(content)
        	u=input("Quel utilisateur souhaitez vous supprimer (entrez son pseudonyme) : ")
        	fic.readlines()
        	if u in fic:
        		fic.writelines("")
        		print("Suppression efféctuée avec succès !")
        		fic.close()
        	else:
        		print("Echec de la suppression.")
        		fic.close()
Ce n'est pas que tu te trompes, mais c'est que tu fais n'importe quoi.

fic.read() lit l'intégralité du fichier et retourne le contenu entier du fichier dans une chaine.
fic.readlines() lit l'intégralité du fichier et retourne une liste des lignes du fichier.
https://docs.python.org/3/library/io.html#io.IOBase.readlines

user_to_del = 'titi'
with open('users.txt') as f:
    users = f.readlines()
    for user in users:
        # En cas de ligne vide éventuelle dans le fichier
        if not user.strip():
            continue
        # Séparation en 2
        name, _ = user.split(':', 1)
        if name == user_to_del:
            users.remove(user)
            print('user', user_to_del, 'deleted')
            break
    else:
        raise ValueError('user {} not found'.format(user_to_del))
with open('users.txt', 'w') as f:
    f.writelines(users)


A tester sur un fichier users.txt avec par ex. des valeurs comme.
toto:123456
lulu:roxor
titi:mdp
lily:plip


Et viens pas encore me dire que ça ne fonctionne pas :D
Messages postés
58
Date d'inscription
mercredi 23 octobre 2019
Statut
Membre
Dernière intervention
5 janvier 2020
4
je pense que c'est sensé fonctionner mais idle me dit que là :
user_to_del = ''
            user_to_del = input("Veuillez entrer un pseudonyme : ")
            with open('users.txt') as f:
            	users = f.readlines()
            	for user in users:
                    if not user.strip():
                        continue
            	    name, _ = user.split(':', 1)#ici
            	    if name == user_to_del:
                        users.remove(user)
                        print('user', user_to_del, 'deleted')
                        break
                    else:
                	raise ValueError('user {} not found'.format(user_to_del))
                    with open('users.txt', 'w') as f:
                        f.writelines(users)

il y a un problème d'indentation
Frizti
Messages postés
58
Date d'inscription
mercredi 23 octobre 2019
Statut
Membre
Dernière intervention
5 janvier 2020
4
d'après IDLE du moins
yg_be
Messages postés
9425
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 janvier 2020
500
peut-être en faisant quelques exercices avec indentation?
Messages postés
58
Date d'inscription
mercredi 23 octobre 2019
Statut
Membre
Dernière intervention
5 janvier 2020
4
CCM écorche mon code voici le bon:
user_to_del = ''
user_to_del = input("Veuillez entrer un pseudonyme : ")
with open('users.txt') as f:
users = f.readlines()
for user in users:
if not user.strip():
continue
name, _ = user.split(':', 1)
if name == user_to_del:
users.remove(user)
print('user', user_to_del, 'deleted')
break
else:
raise ValueError('user {} not found'.format(user_to_del))
with open('users.txt', 'w') as f:
f.writelines(users)
Regarde bien mon code, le else n'est pas lié au if, mais au for (même niveau d'indentation).
Eh oui en python on peut faire un for ... else.
Messages postés
58
Date d'inscription
mercredi 23 octobre 2019
Statut
Membre
Dernière intervention
5 janvier 2020
4
            user_to_del = ""
            user_to_del = input("Veuillez entrer un pseudonyme : ")
            with open('users.txt') as f:
             users = f.readlines()
             for user in users:
                    if not user.strip():
                        continue
                 name, _ = user.split(':', 1)
                 if name == user_to_del:
                        users.remove(user)
                        print('user', user_to_del, 'deleted')
                        break
                else:
                    raise ValueError('user {} not found'.format(user_to_del))
            with open('users.txt', 'w') as f:
                f.writelines(users)
On va quand même pas jouer aux devinettes !
Edite ton précédent message et mets en forme correctement ton code.

On ne mélange pas indentation avec espaces et indentation avec tabulations, et j'ai même pas du à tester ton code, le fait de prendre ton code en sélection, en partant du début et en avançant, on voit qu'il y a une tabulation avant le raise...
Frizti
Messages postés
58
Date d'inscription
mercredi 23 octobre 2019
Statut
Membre
Dernière intervention
5 janvier 2020
4 > trifou
voila !
> Frizti
Messages postés
58
Date d'inscription
mercredi 23 octobre 2019
Statut
Membre
Dernière intervention
5 janvier 2020

https://www.commentcamarche.net/faq/29902-faire-un-copier-coller#copier-coller-un-texte
https://www.commentcamarche.net/forum/affich-36391730-automatiser-une-creation-de-compte-sur-un-programme#22

Si t'es pas capable de faire ça, laisse tomber la programmation.
J'ai l'impression que tu trolles, donc pour ma part, je ne réponds plus.
Messages postés
58
Date d'inscription
mercredi 23 octobre 2019
Statut
Membre
Dernière intervention
5 janvier 2020
4
Attend ! je trolles pas mais je crois qu'il y a un problème avec mon éditeur de texte parce-que quand je fais un copier-coller ça me donne ça :