Vermisse ich etwas oder mit dieser Zeile in guardian.conf.settings
if ANONYMOUS_USER_NAME is None:
ANONYMOUS_USER_NAME = 'AnonymousUser'
ANONYMOUS_USER_NAME kann niemals gleich None sein, wodurch die Tatsache ungĂŒltig wird, dass es optional sein soll. Sieht fĂŒr mich so aus, als wĂ€re das nicht erwĂŒnscht.
Prost
Ja, du hast recht, das sieht zwielichtig aus. Benötigen Sie eine Möglichkeit, standardmĂ€Ăig "AnonymousUser" zu verwenden, ohne zu verhindern, dass es explizit auf "Keine" gesetzt wird.
Was ist, wenn ich den Code wie folgt geÀndert habe? Etwas besser? Dies sollte den Standardwert festlegen, wenn nichts angegeben ist, und es ermöglichen, ihn explizit auf Keine zu setzen.
try:
ANONYMOUS_USER_NAME = settings.ANONYMOUS_USER_NAME
except AttributeError:
try:
ANONYMOUS_USER_NAME = settings.ANONYMOUS_DEFAULT_USERNAME_VALUE
warnings.warn("The ANONYMOUS_DEFAULT_USERNAME_VALUE setting has been renamed to ANONYMOUS_USER_NAME.", DeprecationWarning)
except AttributeError:
ANONYMOUS_USER_NAME = "AnonymousUser"
Ich wĂŒrde sagen, entfernen Sie einfach die beiden Zeilen, die ich kommentiert habe.
Da ANONYMOUS_USER_NAME
tatsĂ€chlich der Wert fĂŒr USERNAME_FIELD
, könnte ANONYMOUS_USER_NAME
eine E-Mail oder was auch immer sein. Die Standardeinstellung von "AnonymousUser"
ist daher irrefĂŒhrend. AuĂerdem löste ANONYMOUS_USER_ID
die Funktion aus und ANONYMOUS_DEFAULT_USERNAME_VALUE
diente als Benutzername. Aber jetzt wurden sie zu einer Einstellung zusammengefĂŒhrt, die als Auslöser und Wert dient. Es macht also keinen Sinn, einen Standardwert anzugeben.
Also wĂŒrde ich bleiben bei:
ANONYMOUS_USER_NAME = getattr(settings, 'ANONYMOUS_USER_NAME', None)
if ANONYMOUS_USER_NAME is None:
ANONYMOUS_USER_NAME = getattr(settings, 'ANONYMOUS_DEFAULT_USERNAME_VALUE', None)
if ANONYMOUS_USER_NAME is not None:
warnings.warn("[...]", DeprecationWarning)
und entfernen Sie die beiden oben genannten Zeilen.
Ich habe gemischte GefĂŒhle bezĂŒglich der try...except
-Syntax, weil ich, obwohl die Wahrheit keine Frage der Zahl ist, nie gesehen habe, dass sie fĂŒr Einstellungen verwendet wird. Der Klassiker <SETTING_NAME> = getattr(settings, "<SETTING_NAME>", <default_value>)
funktioniert normalerweise ziemlich gut.
Wenn wir keinen Standardwert fĂŒr ANONYMOUS_USER_NAME angeben, werden vorhandene Anwendungen beschĂ€digt, die davon ausgehen, dass ein Standardwert bereitgestellt wird. dh wir haben das Verhalten geĂ€ndert, wenn die Einstellung ANONYMOUS_USER_NAME nicht angegeben ist.
Warum dann nicht auf 1.5.0 stoĂen, ANONYMOUS_DEFAULT_USERNAME_VALUE
und den Standardwert entfernen und vor Ănderungen warnen?
Ich glaube, die Absicht war es, Django Guardian laufen zu lassen, ohne dass automatisch ein anonymer Benutzer erstellt wird. Haben Sie einen Anwendungsfall dafĂŒr? Warum ignorieren Sie den anonymen Benutzer nicht einfach, wenn Sie ihn nicht möchten?
Ich denke, es ist eine gute Sache, standardmĂ€Ăig einen anonymen Benutzer zu erstellen. Ich sehe keinen Grund, warum wir dies Ă€ndern sollten. Wir benötigen jedoch einen Standardwert von ANONYMOUS_USER_NAME
damit dies funktioniert. Wenn die Standardeinstellung fĂŒr Ihre Anwendung nicht geeignet ist, können Sie sie jederzeit Ă€ndern.
Die Syntax try ... except
ist gut, da sie es ermöglicht, die FĂ€lle von "Wurde diese Einstellung nicht angegeben?" Zu unterscheiden. und "Wurde dieser Einstellung ein Nullwert zugewiesen?" - Möglicherweise können Sie getattr dafĂŒr verwenden. Ich habe jedoch festgestellt, dass dies ziemlich schnell kompliziert werden kann, insbesondere wenn Sie die DeprecationWarning beibehalten möchten. Ich bin mir nicht sicher, was Sie unter "obwohl die Wahrheit keine Frage der Zahl ist" verstehen.
Was ich meinte war, dass es nicht der richtige / bessere Weg ist, weil jeder eine Sache tut.
Das Erzwingen der Erstellung eines anonymen Benutzers könnte ein langer Weg sein, aber dann sollten die Dokumente aktualisiert werden.
In Bezug auf meine Situation verwende ich ein E-Mail-Feld als Standard-USERNAME_FIELD, daher meine anfĂ€ngliche ZurĂŒckhaltung beim Erstellen der anonymen Benutzerinstanz. Aber ich kann es schaffen.
Prost. Und danke, dass ich deine B * lls kaputt machen durfte.
Leute, ich denke nicht wirklich, dass es eine gute Idee ist, einen anonymen Benutzer zu erstellen. Ich habe django-guardian
lange verwendet und es war nie erforderlich, einen anonymen Benutzer zu haben. Warum sollte ich das jetzt Àndern?
Also wurde meiner Lösung mit try ... except
2 Daumen hoch gegeben, aber wo ich diese Lösung rechtfertige, bekam ich 2 Daumen runter. Verwirrend. Da ich wirklich keinen Nachteil sehe und ich glaube, dass dies der einfachste Weg ist, die Regression zu lösen, ohne neue Regressionen hinzuzufĂŒgen, werde ich diese Lösung anwenden.
@brianmay Entschuldigung fĂŒr die Verwirrung. : +1: fĂŒr das Update!
Hilfreichster Kommentar
Was ist, wenn ich den Code wie folgt geÀndert habe? Etwas besser? Dies sollte den Standardwert festlegen, wenn nichts angegeben ist, und es ermöglichen, ihn explizit auf Keine zu setzen.