Есть ли встроенный шаблон входа в Django?


Я хочу, чтобы пользователь вошел в систему перед просмотром страниц. Есть ли встроенный шаблон для входа пользователя, так что мне не нужно писать свою собственную страницу входа?

5 56

5 ответов:

да. Вы можете прочитать все об этом здесь: https://docs.djangoproject.com/en/1.8/topics/auth/default/#django.contrib.auth.decorators.login_required ... но вот некоторые пункты маркированного списка:

  • добавить 'django.contrib.auth.middleware.AuthenticationMiddleware' to MIDDLEWARE_CLASSES на settings.py
  • добавить 'django.contrib.auth и 'django.contrib.contenttypes' до INSTALLED_APPS на settings.py
  • настройка URL для входа с помощью django.contrib.auth.views.login для вида, например url(r'^login/$', 'django.contrib.auth.views.login',name="my_login")
  • на ваш взгляд, включать login_required декоратор и добавить его перед вашим видом. Например...

views.py...

from django.contrib.auth.decorators import login_required

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

по умолчанию вы помещаете шаблон внутрь my_template_directory/registration/login.html . Дополнительную информацию об этом шаблоне можно найти по ссылке в начале этого поста.

как уже упоминалось в комментариях автора, самый простой способ сделать это-добавить следующие строки в urls.py:

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),
)

насколько я знаю, добавлять r'^accounts/$' и r'^accounts/profile/$' URL-адреса не требуется, если не требуется управление профилем пользователя.

как предложил @mmatt в комментариях, set LOGIN_REDIRECT_URL = '/' на settings.py чтобы избежать перенаправления по умолчанию /accounts/profile/ после входа в систему. Смотрите LOGIN_REDIRECT_URL в настройках Django документация.

это также должно работать в Django 2.x с помощью path вместо url надлежащим образом.

самый upvoted response by @brant технически неверно. Django предоставляет представления по умолчанию для обработки функциональности входа, но за документация не дает шаблон:

Django не предоставляет шаблон по умолчанию для представлений аутентификации. Вы должны создать свои собственные шаблоны для представлений, которые вы хотите использовать. Контекст шаблона задокументирован в каждом представлении, см. Все представления проверки подлинности.

Если вы хотите взять быстрый маршрут, чтобы встать и работать я рекомендую использовать URLConf при условии.

например:

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

смотрите дополнительную информацию в документации django: https://docs.djangoproject.com/en/1.8/topics/auth/default/#module-django.contrib.auth.views

подобно ответу mrts, в более позднем Django вы можете использовать LoginView. Вы можете дополнительно настроить шаблон, установив контекст шаблона, например title,site_title etc. как используется в admin / base.HTML-код так что это не похоже на логин admin.

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'),
]