Is there a built-in login template in Django?

Solution 1:

Yes. You can read all about it here: https://docs.djangoproject.com/en/1.8/topics/auth/default/#django.contrib.auth.decorators.login_required ... but here are some bullet points:

  • add 'django.contrib.auth.middleware.AuthenticationMiddleware' to MIDDLEWARE_CLASSES in settings.py
  • add 'django.contrib.auth' and 'django.contrib.contenttypes' to INSTALLED_APPS in settings.py
  • setup a URL for the login using django.contrib.auth.views.login for the view, such as url(r'^login/$', 'django.contrib.auth.views.login',name="my_login")
  • In your view, include the login_required decorator and add it before your view. For example...

views.py...

from django.contrib.auth.decorators import login_required

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

By default, you then put the template inside my_template_directory/registration/login.html . Further info about that template can be found at the link in the beginning of this post.

Solution 2:

As mentioned in the comments by the author, the easiest way to do this is to add the following lines to 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),
)

As far as I know, adding the r'^accounts/$' and r'^accounts/profile/$' URLs is not necessary unless user profile management is required.

As suggested by @mmatt in comments, set LOGIN_REDIRECT_URL = '/' in settings.py to avoid the default redirect to /accounts/profile/ after login. See LOGIN_REDIRECT_URL in Django settings documentation.

This should also still work in Django 2.x using path instead of url appropriately.