Login für ein kleines Programm

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Ghost
User
Beiträge: 25
Registriert: Dienstag 23. September 2008, 06:02

Hallo,

ich habe mal wieder ein kleines Problem.
Wir lernen seit etwa einem halben Jahr in der Schule python. Ich will damit sagen das ich noch nicht wirklich viel kann. Aber das will ich versuchen zu ändern.

Nun zu meinem Problem. Ich möchte ein kleines einfaches Login programmieren. Die Logindaten sollen dann in einer externen Datei gespeichert werden. Ich habe mich dann im Internet schonmal ein bisschen schlau gemacht und bin auf Pickle gestossen.

Das Login funktioniert nun zwar schon, bis auf eine Sache. Wenn ich einen Benutzeraccount erstelle wird dieser zwar gespeichert. Aber wenn ich dann wieder einen erstelle wird der andere gelöscht.

Hier mal der Code:

Code: Alles auswählen

import pickle
#Frage nach Benutzernamen
abfrage = raw_input("Haben Sie schon einen Benutzernamen? ja oder nein ")
print

if abfrage == "nein":
    abfrage_bedingung = 0
    while abfrage_bedingung == 0:
        #Login erstellen
        print "Erstellen Sie sich bitte einen Benutzeraccount."
        print
        benutzername = raw_input("Geben Sie den gewünschten Benutzernamen ein ")
        passwort = raw_input("Geben Sie ein gewünschtes Passwort ein ")
        print
        abfrage_bedingung = 1
        #Logindaten speichern
        datei = open("benutzername.txt", "w")
        pickle.dump(benutzername, datei)
        datei.close()
        datei = open("passwort.txt", "w")
        pickle.dump(passwort, datei)
        datei.close()

    
#Einloggen
login = 0
while login == 0:
    datei = open("benutzername.txt", "r")
    datenT = pickle.load(datei)
    datei.close()
    datei = open("passwort.txt", "r")
    datenT = pickle.load(datei)
    datei.close()
    print "Bitte loggen Sie sich nun mit Ihrem Benutzernamen und Passwort ein."
    login_b = raw_input("Wie lautet Ihr Benutzername? ")
    login_p = raw_input("Wie lautet Ihr Passwort? ")
    if login_b == benutzername and login_p == passwort:
        login = 1
    else:
        login = 0
        print "Falsches Passwort oder Benutzername!"
Ich hoffe ihr könnt mir dabei helfen, dass ich mehrere Benutzerkonten erstellen kann.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Vorschlag: Du benutzt `shelve' und kannst dann ganz einfach wie mit einem Dictionary arbeiten .. ausserdem fällt die lächerliche Abfrage weg, ob man schon einen Acc hat ;)

Damit du am meisten lernst: http://docs.python.org/library/shelve.html + Keine direkte Lösung von mir ;)

Btw: Deine while-Schleifen sind unnötig und lassen sich durch eine Funktion (+ evtl. Rekursion) und vor allem durch if-Abfragen ersetzten.
Ghost
User
Beiträge: 25
Registriert: Dienstag 23. September 2008, 06:02

Okay,

Vielen Dank, dann werde ich mich mal in shelve reinlesen.

Ja ich weis, der Aufbau ist noch nicht der sinnvollste.

Ich wollte nur erstmal das es funktioniert :lol:
Ghost
User
Beiträge: 25
Registriert: Dienstag 23. September 2008, 06:02

Also ich verstehe das ganze irgendwie überhaupt nicht.

Beschäftige mich dafür wohl noch nicht lange genug mit Python.

Kann mir da vielleicht mal jemand nen Lösungsvorschlag mit Erklärung machen?

Das wäre echt super :)
Oder mir vielleicht nen Lösungsvorschlag in Pickle mit Erklärung machen.

Wäre für beides echt dankbar. Ich glaube nämlich das ich es dann besser verstehen würde.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Ich dachte du wolltest das lernen? ;)
Na weil ich grad lust hatte:

Code: Alles auswählen

import shelve

pw_db = shelve.open("pass.db")

username = raw_input("Benutzername: ")
pw = raw_input("Passwort: ")

if username in pw_db:
    if pw_db[username] == pw:
        print "Hello %s" % username
    else:
        print "Passwort falsch!"
else:
    add = raw_input("Benutzer %s nicht gefunden. Hinzufügen? y/n" % username)
    if add == "y":
        pw = raw_input("Passwort: ")
        pw_db[username] = pw
pw_db.close()
Wobei es natürlich ein Sicherheitsrisiko ist, dass der Benutzer erfährt, ob es irgendeinen Account gibt. Wenn das zählt, sollte man die Benutzerverwaltung extra führen.
Nach meinem Minimalbeispiel, sollte der Rest nu aber ein Klacks für dich sein, wenn du schon nen halbes Jahr Schlangen beschwörst.
Zuletzt geändert von cofi am Freitag 23. Januar 2009, 13:35, insgesamt 2-mal geändert.
Ghost
User
Beiträge: 25
Registriert: Dienstag 23. September 2008, 06:02

Hi,

vielen Dank. Natürlich will ich was lernen. Jetzt werde ich mir den Code von dir so lange angucken und nachforschen bis ich ihn zu 100% verstanden habe. Und ihn aus dem Kopf alleine anwenden kann.

Nochmals vielen Dank :)
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Na auswendig lernen bringt wenig ;)
Aber ich merk grad, dass das gar nich lauffähig sein sollte ... programmiern ohne Syntax Highlighting ... -> gefixt
Ghost
User
Beiträge: 25
Registriert: Dienstag 23. September 2008, 06:02

Kann es sein, das es hier wieder nicht möglich ist, mehrere Benutzernamen und Passwörter zu speichern, ohne das das andere überspeichert wird?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Ich würde eher sagen, dass Zeile 8 einen Fehler enthält ;-)
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Tss ... warum hat der Forums-"editor", denn keinen vi-mode ;)

Ne der "Fehler" ist erst dadurch entstanden, dass ich `pass' durch `pw' ersetzt hab.

Zum Problem: Das kann nicht sein. Ein shelve verhält sich wie ein Dictionary. Es sei denn, deine Benutzernamen sind die gleichen ;)
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

cofi hat geschrieben:Tss ... warum hat der Forums-"editor", denn keinen vi-mode ;)
https://addons.mozilla.org/de/firefox/addon/5482 und https://addons.mozilla.org/de/firefox/addon/7360 machen es möglich, wenn du Firefox benutzt.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Wow .. danke derdon :) Werde mal den embedded editor testen. Der hört sich gut an ;)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

cofi hat geschrieben:Wow .. danke derdon :) Werde mal den embedded editor testen. Der hört sich gut an ;)
Oder einen vi in JS nehmen, lässt sich dann in jedem Browser (evtl durch Userscripts) nutzen.
Antworten