Der Django 1.10 Weg
Für Django 1.10, das im August 2016 veröffentlicht wurde, redirect_authenticated_userwurde der login()funktionsbasierten Ansicht in django.contrib.auth[1] ein neuer Parameter mit dem Namen hinzugefügt .
Beispiel
Angenommen, wir haben eine Django-Anwendung mit einer Datei mit dem Namen views.pyund einer anderen Datei mit dem Namen urls.py. Die urls.pyDatei enthält folgenden Python-Code:
from django.contrib.auth import views as auth_views
from . import views as app_views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^login/', auth_views.login, name='login',
kwargs={'redirect_authenticated_user': True}),
url(r'^dashboard/', app_views.Dashboard.as_view(), name='dashboard'),
url(r'^$', TemplateView.as_view(template_name='index.html'), name='index'),
]
Aus dieser Datei ist der relevante Teil innerhalb der urlpatternsVariablendefinition der folgende, der den bereits erwähnten redirect_authenticated_userParameter mit einem TrueWert verwendet:
url(r'^login/', auth_views.login, name='login',
kwargs={'redirect_authenticated_user': True}),
Beachten Sie, dass der Standardwert des redirect_authenticated_userParameters ist False.
Der Django 1.11 Weg
Für Django 1.11, das im April 2017 veröffentlicht wurde, hat die LoginViewklassenbasierte Ansicht die login()funktionsbasierte Ansicht [2] abgelöst, sodass Sie zwischen zwei Optionen wählen können:
- Verwenden Sie die gleiche Django 1.10-Methode, die gerade beschrieben wurde. Dies ist positiv, da Ihr aktueller Code weiterhin einwandfrei funktioniert. Wenn Sie den Python-Interpreter anweisen, Warnungen anzuzeigen, indem Sie beispielsweise in einem Konsolenterminal den Befehl
python -Wd manage.py runserverin Ihrem Django-Projektverzeichnis ausführen und dann mit einem Webbrowser zu Ihrer Anmeldeseite wechseln, wird in demselben Konsolenterminal eine Warnmeldung wie die folgende angezeigt:
/usr/local/lib/python3.6/site-packages/django/contrib/auth/views.py:54: RemovedInDjango21Warning: Die Ansicht login () wird durch die klassenbasierte LoginView () ersetzt.
- Verwenden Sie das Neue
Django 1.11 way, um Ihren Code moderner und kompatibler mit zukünftigen Django-Versionen zu machen. Mit dieser Option sieht das zuvor angegebene Beispiel nun wie folgt aus:
Beispiel
Wir nehmen wieder an, dass wir eine Django-Anwendung mit einer Datei namens views.pyund einer anderen Datei namens haben urls.py. Die urls.pyDatei enthält folgenden Python-Code:
from django.contrib.auth import views as auth_views
from . import views as app_views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^login/',
auth_views.LoginView.as_view(redirect_authenticated_user=True),
name='login'),
url(r'^dashboard/', app_views.Dashboard.as_view(), name='dashboard'),
url(r'^$', TemplateView.as_view(template_name='index.html'), name='index'),
]
Aus dieser Datei ist der relevante Teil innerhalb der urlpatternsVariablendefinition der folgende, der wiederum den bereits erwähnten redirect_authenticated_userParameter mit einem TrueWert verwendet, ihn jedoch als Argument an die as_viewMethode der LoginViewKlasse übergibt :
url(r'^login/',
auth_views.LoginView.as_view(redirect_authenticated_user=False),
name='login'),
Beachten Sie, dass hier auch der Standardwert des redirect_authenticated_userParameters ist False.
Verweise
custom_loginmit einem zweiten Argument deklarieren**kwargs, damit alle Argumente, die Sie nicht interessieren, an die integrierteloginAnsicht übergeben werden.