Ich entschuldige mich, wenn es bereits eine substanzielle Antwort darauf gegeben hat, habe ich lange gesucht und kann keine hilfreichen Antworten finden.Benutzer erstellen und Passwort zurücksetzen in Django
Ich habe ein Django-Projekt, das verschiedene Ebenen des Kontozugriffs hat. Ich habe eine Gruppe von "Managern" und möchte ihnen erlauben, Benutzerkonten zu verwalten.
Ich möchte die Manager die Benutzerkontoobjekte für die Benutzer erstellen können. Ich möchte jedoch nicht, dass sie sich mit der Erstellung ihrer Passwörter befassen und sie (aus offensichtlichen Gründen) an die Benutzer senden müssen. Auf diese Weise können Manager die Identität von Benutzern übernehmen, um in ihrem Auftrag Arbeit zu erledigen, und die Benutzer behalten die Kontrolle über das Passwort und die Inhaberschaft ihrer Daten bei.
Die Idee ist, dass Manager das Konto erstellen, und wenn das Konto erstellt wird Benutzern ein Passwort-Reset-Formular (wie Django Out-of-Box-Auth), die ihnen ihre Kennwörter festlegen können gesendet werden.
Mein Code sieht unten auf ähnliche (entfällt nicht zwingend notwendig, Sachen)
from django.contrib.auth.models import User
from django.contrib.auth.forms import PasswordResetForm
@manager_required
def manager_add_users(request):
add_user_form = manager_add_user_form(request.POST)
new_user_name = add_user_form.cleaned_data['user_name']
new_user_email = add_user_form.cleaned_data['user_email']
new_user = User.objects.create_user(
username = new_user_name,
email = new_user_email,
)
new_user.save()
set_password_form = PasswordResetForm({'email': new_user.email })
if set_password_form.is_valid():
print 'Reset Form Is Valid'
set_password_form.save(
request= request,
use_https=True,
from_email="[email protected]",
email_template_name='registration/password_reset_email.html')
Das Konto schafft richtig und alles läuft ohne Fehler. Das Problem ist, dass, obwohl das Formular gültig ist (Reset-Formular ist eine gültige Anweisung druckt), es tatsächlich nicht das Reset-Formular sendet. Es gibt keine Formfehler.
jedoch in Tests, wenn ich initialisieren das Formular mit einer Adresse, wie dies in dem System bereits vorhanden ist:
set_password_form = PasswordResetForm({'email':'[email protected]'})
Das Passwort-Reset-Formular sendet, ohne Fehler. Es funktioniert also nur mit vorhandenen Benutzer-E-Mail-Adressen im System, aber obwohl der Benutzer erstellt wurde und die .save() -Methode aufgerufen wurde, fängt er es immer noch nicht ab (Die Benutzer werden bei der Erstellung als 'Aktiv' gekennzeichnet, sollten also sein) kann gefunden werden)
Ich bin ein bisschen ratlos. Ich kann mir einige Möglichkeiten vorstellen, wie ich dieses Problem lösen könnte, aber dies scheint der direkteste Weg zu sein und ich bin mir nicht ganz sicher, warum es nicht funktioniert.
Ja, ich kann Nachrichten senden. Ich benutze zum Testen Backend-Mail des django:
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
Sie haben nichts über Ihr E-Mail-Backend erwähnt. Django selbst versendet keine E-Mails, Sie müssen einen E-Mail-Server konfigurieren. Wenn Tests ausgeführt werden, ersetzt es ein Dummy-Backend. Haben Sie einen E-Mail-Server eingerichtet und bestätigt, dass Sie tatsächlich E-Mails damit versenden können? –
Entschuldigung. Ich benutze djangos Backend. Ich dachte, es wäre klar, dass ich einen Mail-Server konfiguriert hätte, als ich erwähnte, dass ich in einigen Testfällen erfolgreich Mails erhalten habe. Ich habe die Frage aktualisiert, um meine Einstellungen zu übernehmen. – rob
Danke für die Klärung. Ich habe es erwähnt, weil Tests problemlos funktionieren können, ohne dass ein Mail-Server eingerichtet wurde, da Djangos Test-Runner ein Test-Backend ersetzt. –