3 Stimmen

Der Code zur Erstellung des Django-Benutzerprofils wird zweimal ausgeführt - warum?

Ich verwende Django 1.2 und führe die django-registrierung Anwendung und die Erstellung eines Benutzerprofilobjekts nach der Registrierung den Benutzer erstellt - unter Verwendung von Code, der aus einer anderen Frage stammt:

# models.py
def create_player_profile(sender, instance, created, **kwargs):
    signals.post_save.disconnect(create_player_profile, sender = User) # added.
    if created:
        print "creating profile."
        profile, created = PlayerProfile.objects.get_or_create(user = instance)
        print "profile %s created = %s" % (str(profile), str(created))
    else:
        print "problems creating profile."

signals.post_save.connect(create_player_profile, sender = User)

Und es funktioniert gut :) Das einzige Problem ist, dass ich zwei Sätze von Ausgaben erhalte, die anzeigen, dass der Code ausgeführt wird zweimal . Ich vermute, dass das Signal aus irgendeinem Grund doppelt gesendet wird.

Mein erster Gedanke ist, dass die Datei importiert zweimal, wodurch zwei identische Signale erzeugt werden. Deshalb frage ich mich, ob vielleicht django-registrierung etwas automatisch tut? Oder etwas anderes, das ich noch nicht über Django verstehe :)

Warum wird der Code dann zweimal ausgeführt? Werden zwei Signale gesendet, und wenn ja, warum?

更新情報 Gerade bemerkt diese Antwort erklärt, wie doppelte Signale vermieden werden können. Und es funktionierte, etwas :) Meine Ausgabe ging von:

Profil erstellen.
Profil erstellen.
Probleme bei der Profilerstellung
Probleme bei der Profilerstellung

zu:

Profil erstellen.
Probleme bei der Profilerstellung

Ich weiß nicht, ob das bedeutet, dass mein Code ursprünglich unter viermal ? Und nur noch zwei Mal? Ich bin so verwirrt :)

Update 2 - Hinzufügen der signals.disconnect Linie. Ich dachte, das Löschen des Signals würde verhindern, dass die Funktion zweimal ausgeführt wird. Leider habe ich mich geirrt. create-player-profile es immer noch läuft zweimal... Ich habe keine Ahnung, warum das so ist, wenn das Signal sofort gelöscht wurde.

1voto

Torsten Engelbrecht Punkte 12832

更新情報 : entfernt dieses Zeug über AUTH_PROFILE_MODULE

Warum wird der Code dann zweimal ausgeführt? Werden werden zwei Signale gesendet, und wenn ja, warum?

Ich denke, das Problem ist nicht, dass das Signal zweimal aufgerufen wird, sondern Ihre User.save() Methode irgendwo zweimal aufgerufen wird (und damit auch das Signal). Vielleicht sollten Sie dies zuerst überprüfen.

0voto

Eigengrau Punkte 971

Es kann auch passieren, wenn das Modul eine schlechte Einrückung hat, wenn Sie vielleicht Leerzeichen und Tabulatoren in der Funktion create_player_profile verwechselt haben, dann kann das auch passieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X