Есть ли встроенный шаблон входа в Django? - PullRequest
56 голосов
/ 19 мая 2010

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

Ответы [ 5 ]

46 голосов
/ 19 мая 2010

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

  • добавить 'django.contrib.auth.middleware.AuthenticationMiddleware' к MIDDLEWARE_CLASSES в settings.py
  • добавьте 'django.contrib.auth'django.contrib.contenttypes' к INSTALLED_APPS in 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. Дополнительную информацию об этом шаблоне можно найти по ссылке в начале этого сообщения.

32 голосов
/ 02 января 2015

Как уже упоминалось в комментариях автора, самый простой способ сделать это - добавить следующие строки в 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),
)

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

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

Это также должно работать в Django 2.x, используя path вместо url соответственно.

14 голосов
/ 17 марта 2017

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

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

4 голосов
/ 26 мая 2015

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

например:

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

Подробнее см. В документации django: https://docs.djangoproject.com/en/1.8/topics/auth/default/#module-django.contrib.auth.views

3 голосов
/ 05 июня 2018

Подобно ответу mrts, в более позднем Django вы можете использовать LoginView .Вы можете дополнительно настроить шаблон, установив контекст шаблона, например title, site_title и т. Д., Который используется в admin / base.html , чтобы он не выглядел как логин администратора.

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'),
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...