Django login script code snippet
Based off what I learned making my previous tutorial
A simple introduction to Django forms, I made a somewhat more elegant login script which includes the ability to log out (what a novel idea!).
So here it is:
models.py
from django import forms
class LoginForm(forms.Form):
username = forms.CharField(max_length=100)
password = forms.CharField(widget=forms.PasswordInput(render_value=False),max_length=100)
My previous tutorial explains the widget parameter.
views.py
from project.courses.models import LoginForm
def check_login(request):
def errorHandle(error):
form = LoginForm()
return render_to_response('pathto/login.html', {
'error' : error,
'form' : form,
})
if request.user.is_authenticated():
username = request.user.username
return render_to_response('pathto/logged_in.html', {
'username': username,
})
else:
if request.method == 'POST': # If the form has been submitted...
form = LoginForm(request.POST) # A form bound to the POST data
if form.is_valid(): # All validation rules pass
username = request.POST['username']
password = request.POST['password']
user = authenticate(username=username, password=password)
if user is not None:
if user.is_active:
# Redirect to a success page.
login(request, user)
return render_to_response('pathto/logged_in.html', {
'username': username,
})
else:
# Return a 'disabled account' error message
error = u'account disabled'
return errorHandle(error)
else:
# Return an 'invalid login' error message.
error = u'invalid login'
return errorHandle(error)
else:
error = u'form is invalid'
return errorHandle(error)
else:
form = LoginForm() # An unbound form
return render_to_response('pathto/login.html', {
'form': form,
})
def logout_view(request):
if request.user.is_authenticated():
logout(request)
form = LoginForm()
return check_login(request)
else:
check_login(request)
return HttpResponseRedirect('/')
The errorHandle function takes an error message as an argument and passes that to the login template. If the template is given an error message, it displays that above the login form. Pretty simple, so far? Good.
The logout_view function checks if the user is not logged in. If the user is logged in, it logs it out.
And here are the templates:
login.html
logged_in.html
Welcome,
Logout
You can also look at this code at
djangosnippets.org.
Alan
22 December 2008