Seite 1 von 1

Login für ein kleines Programm

Verfasst: Donnerstag 22. Januar 2009, 21:43
von Ghost
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.

Verfasst: Donnerstag 22. Januar 2009, 21:50
von cofi
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.

Verfasst: Donnerstag 22. Januar 2009, 22:40
von Ghost
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:

Verfasst: Donnerstag 22. Januar 2009, 23:25
von Ghost
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.

Verfasst: Donnerstag 22. Januar 2009, 23:41
von cofi
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.

Verfasst: Donnerstag 22. Januar 2009, 23:45
von Ghost
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 :)

Verfasst: Donnerstag 22. Januar 2009, 23:52
von cofi
Na auswendig lernen bringt wenig ;)
Aber ich merk grad, dass das gar nich lauffähig sein sollte ... programmiern ohne Syntax Highlighting ... -> gefixt

Verfasst: Freitag 23. Januar 2009, 00:12
von Ghost
Kann es sein, das es hier wieder nicht möglich ist, mehrere Benutzernamen und Passwörter zu speichern, ohne das das andere überspeichert wird?

Verfasst: Freitag 23. Januar 2009, 08:04
von Hyperion
Ich würde eher sagen, dass Zeile 8 einen Fehler enthält ;-)

Verfasst: Freitag 23. Januar 2009, 13:35
von cofi
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 ;)

Verfasst: Freitag 23. Januar 2009, 14:14
von derdon
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.

Verfasst: Freitag 23. Januar 2009, 14:58
von cofi
Wow .. danke derdon :) Werde mal den embedded editor testen. Der hört sich gut an ;)

Verfasst: Freitag 23. Januar 2009, 15:59
von Leonidas
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.