it-swarm.com.de

Gibt es eine integrierte Anmeldevorlage in Django?

Ich möchte, dass sich ein Benutzer anmeldet, bevor Seiten angezeigt werden. Gibt es eine integrierte Vorlage für die Benutzeranmeldung, sodass ich keine eigene Anmeldeseite erstellen muss?

56
stanleyxu2005

Ja. Sie können hier alles darüber lesen: https://docs.djangoproject.com/de/1.8/topics/auth/default/#Django.contrib.auth.decorators.login_required ... aber hier sind einige Stichpunkte:

  • addiere 'Django.contrib.auth.middleware.AuthenticationMiddleware' zu MIDDLEWARE_CLASSES in settings.py
  • addiere 'Django.contrib.auth 'und 'Django.contrib.contenttypes' zu INSTALLED_APPS in settings.py
  • richten Sie eine URL für die Anmeldung mit Django.contrib.auth.views.login für die Ansicht ein, z. B. url(r'^login/$', 'Django.contrib.auth.views.login',name="my_login")
  • Fügen Sie in Ihrer Ansicht den Dekorator login_required hinzu und fügen Sie ihn vor Ihrer Ansicht hinzu. Beispielsweise...

views.py ...

from Django.contrib.auth.decorators import login_required

@login_required
def home(request):
  return HttpResponse('Home Page')

Standardmäßig setzen Sie die Vorlage dann in my_template_directory/registration/login.html. Weitere Informationen zu dieser Vorlage finden Sie unter dem Link am Anfang dieses Beitrags.

46
Brant

Wie in den Kommentaren des Autors erwähnt, ist es am einfachsten, die folgenden Zeilen zu urls.py Hinzuzufügen:

from Django.contrib.auth.views import login, logout

urlpatterns = patterns('',
    url(r'^accounts/login/$', login, {'template_name': 'admin/login.html'}),
    url(r'^accounts/logout/$', logout),
)

Soweit mir bekannt ist, ist das Hinzufügen der URLs r'^accounts/$' Und r'^accounts/profile/$' Nur erforderlich, wenn eine Benutzerprofilverwaltung erforderlich ist.

Wie von @mmatt in Kommentaren vorgeschlagen, setzen Sie LOGIN_REDIRECT_URL = '/' In settings.py, Um die Standardumleitung nach der Anmeldung auf /accounts/profile/ Zu vermeiden. Siehe LOGIN_REDIRECT_URL in Django Einstellungsdokumentation.

Dies sollte auch in Django 2.x noch funktionieren und path anstelle von url verwenden.

32
mrts

Die meisten pvoted Antwort von @brant ist technisch falsch. Django bietet Standardansichten für die Anmeldefunktionalität, aber laut Dokumentation gibt es keine Vorlage:

Django bietet keine Standardvorlage für die Authentifizierungsansichten. Sie sollten Ihre eigenen Vorlagen für die Ansichten erstellen, die Sie verwenden möchten. Der Vorlagenkontext wird in jeder Ansicht dokumentiert, siehe Alle Authentifizierungsansichten.

14
Jonny Waffles

Wenn Sie einen schnellen Weg zur Inbetriebnahme finden möchten, empfehlen wir Ihnen, die mitgelieferte URLConf zu verwenden.

beispielsweise:

urlpatterns = [
    url('^', include('Django.contrib.auth.urls'))
]

Weitere Details finden Sie in der Django Dokumentation: https://docs.djangoproject.com/de/1.8/topics/auth/default/#module-Django.contrib.auth. Ansichten

4
Shailesh

Ähnlich wie bei der Antwort von mrts können Sie in neueren Versionen von Django LoginView verwenden. Sie können die Vorlage weiter anpassen, indem Sie den Vorlagenkontext wie title, site_title usw. wie in admin/base.html verwendet, damit es nicht wie ein Administrator-Login aussieht.

from Django.contrib.auth.views import LoginView

urlpatterns = [
    url(  
        r'^accounts/login/$',  
        LoginView.as_view(
            template_name='admin/login.html',
            extra_context={         
              'title': 'Login',
              'site_title': 'My Site',
              'site_header': 'My Site Login'},
        name='login'),
]
3
Yushin Washio