Django-guardian: ANONYMOUS_USER_NAME Kein Wert

Erstellt am 9. MĂ€rz 2016  Â·  10Kommentare  Â·  Quelle: django-guardian/django-guardian

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

Bug

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.

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"

Alle 10 Kommentare

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!

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

David-OConnor picture David-OConnor  Â·  6Kommentare

lukaszb picture lukaszb  Â·  14Kommentare

xuhcc picture xuhcc  Â·  10Kommentare

Dzejkob picture Dzejkob  Â·  28Kommentare

Allan-Nava picture Allan-Nava  Â·  4Kommentare