Is there a built-in login template in Django?
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'
toMIDDLEWARE_CLASSES
insettings.py
- add
'django.contrib.auth
' and'django.contrib.contenttypes'
toINSTALLED_APPS
insettings.py
- setup a URL for the login using
django.contrib.auth.views.login
for the view, such asurl(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.
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.
For Django 2.1 and above, the function-based views have been removed in favour of class-based views:
from django.contrib.auth.views import LoginView
urlpatterns = [
...
path('accounts/login/', LoginView.as_view(template_name='admin/login.html')),
...
]