Endlich verstanden:
Mit so viel experimentierfreudigem und minimalem Effekt auf Authentication Backend
-Modell, endlich erreicht.
[Danke an Mr. @freakish für einen anderen Gedanken]
Hier ist es:
%Vor%Ich habe es getestet und es hat wie erwartet funktioniert. : D
Also, hier sind die Testfälle :
%Vor% Implizite Groß- / Kleinschreibung-unabhängige Abfragen für die Datenbank %Vor% Dies ermöglicht username
& amp; yugal
ergibt denselben Benutzer.
Dieses Affenflicken sieht nach einer schlechten Idee aus. Sie werden in Zukunft definitiv einige Probleme (Django macht eine Menge Sachen hinter der Szene) treffen. Ich empfehle dringend, Ihre App neu zu gestalten.
Allerdings können Sie Folgendes versuchen (indem Sie Ihre True
-Klasse verwenden):
Nun, ich bin nicht 100%, dass das funktionieren wird, und es ist ein bisschen hacky, also benutze es mit Vorsicht. :)
Es gibt einen relativ sauberen Weg, dies zu tun:
%Vor%Dann stellen Sie
ein %Vor%Sie müssen Nutzernamen in Ihrem Registrierungsarbeitsablauf auch in Kleinbuchstaben erzwingen
Dies funktioniert alles in Ordnung, behält jedoch den vom Benutzer angegebenen Fall nicht bei und ist auch nicht effizient in der Datenbank nachzuschlagen. Das Standard-Django-Verhalten ist von Entwurf, siehe Ссылка
Der einfachste Weg, den Benutzernamen ohne Berücksichtigung der Groß- / Kleinschreibung zu verwenden, besteht darin, den Standardwert C++
zu übernehmen und Operator Overloading
method zu überschreiben.
Bitte beachten Sie, dass wir innerhalb des auth user
Blocks auth user
ausführen, indem wir die Arbeitszeit verringern. Fehlerbericht behoben
Fügen Sie dieses Backend zu django
in settings.py
Ich habe einige Zeilen in meinem Registrierungs- und Login-Prozess geändert, die für mich zu funktionieren scheinen. Mit meiner Lösung werden die Benutzernamen immer noch angezeigt, so wie der Benutzer sie bei der Registrierung geschrieben hat, aber es wird anderen nicht erlauben, denselben Benutzernamen anders zu verwenden. Es ermöglicht Benutzern auch, sich anzumelden, ohne sich Gedanken darüber machen zu müssen, den Benutzernamen für Groß- und Kleinschreibung zu schreiben.
Ich habe das Registrierungsformular geändert, um nach Groß- und Kleinschreibung zu suchen.
Dies ist eine Zeile von meiner Validierung des Benutzernamens, es sucht nach Benutzer mit diesem Benutzernamen.
%Vor%Dann musste ich Benutzern erlauben, sich mit Benutzernamen ohne Berücksichtigung der Groß- / Kleinschreibung anzumelden.
Aus meiner Login-Ansicht:
%Vor%Endlich verstanden:
Mit so viel experimentierfreudigem und minimalem Effekt auf User
-Modell, endlich erreicht.
[Danke an Mr. @freakish für einen anderen Gedanken]
Hier ist es:
%Vor%Ich habe es getestet und es hat wie erwartet funktioniert. : D
Also, hier sind die Testfälle :
%Vor% Implizite Groß- / Kleinschreibung-unabhängige Abfragen für die Datenbank %Vor% Dies ermöglicht User.objects.get(username='yugal')
& amp; User.objects.get(username='YUGAl')
ergibt denselben Benutzer.
Ich habe einige Zeilen in meinem Registrierungs- und Login-Prozess geändert, die für mich zu funktionieren scheinen. Mit meiner Lösung werden die Benutzernamen immer noch angezeigt, so wie der Benutzer sie bei der Registrierung geschrieben hat, aber es wird anderen nicht erlauben, denselben Benutzernamen anders zu verwenden. Es ermöglicht Benutzern auch, sich anzumelden, ohne sich Gedanken darüber machen zu müssen, den Benutzernamen für Groß- und Kleinschreibung zu schreiben.
Ich habe das Registrierungsformular geändert, um nach Groß- und Kleinschreibung zu suchen.
Dies ist eine Zeile von meiner Validierung des Benutzernamens, es sucht nach Benutzer mit diesem Benutzernamen.
%Vor%Dann musste ich Benutzern erlauben, sich mit Benutzernamen ohne Berücksichtigung der Groß- / Kleinschreibung anzumelden.
Aus meiner Login-Ansicht:
%Vor%Dieses Affenflicken sieht nach einer schlechten Idee aus. Sie werden in Zukunft definitiv einige Probleme (Django macht eine Menge Sachen hinter der Szene) treffen. Ich empfehle dringend, Ihre App neu zu gestalten.
Allerdings können Sie Folgendes versuchen (indem Sie Ihre iUnicode
-Klasse verwenden):
Nun, ich bin nicht 100%, dass das funktionieren wird, und es ist ein bisschen hacky, also benutze es mit Vorsicht. :)
Es gibt einen relativ sauberen Weg, dies zu tun:
%Vor%Dann stellen Sie
ein %Vor%Sie müssen Nutzernamen in Ihrem Registrierungsarbeitsablauf auch in Kleinbuchstaben erzwingen
Dies funktioniert alles in Ordnung, behält jedoch den vom Benutzer angegebenen Fall nicht bei und ist auch nicht effizient in der Datenbank nachzuschlagen. Das Standard-Django-Verhalten ist von Entwurf, siehe Ссылка
Der einfachste Weg, den Benutzernamen ohne Berücksichtigung der Groß- / Kleinschreibung zu verwenden, besteht darin, den Standardwert ModelBackend
zu übernehmen und authenticate
method zu überschreiben.
Bitte beachten Sie, dass wir innerhalb des except
Blocks UserModel().set_password(password)
ausführen, indem wir die Arbeitszeit verringern. Fehlerbericht behoben
Fügen Sie dieses Backend zu AUTHENTICATION_BACKENDS
in settings.py
Tags und Links python django operator-overloading