For a login action, you can make use of a generic FormView, and add the message in success_message bring to you by the SuccessMessageMixin, in views.py file:
from django.contrib.auth import login
from django.contrib.auth.forms import AuthenticationForm
from django.contrib import messages
from django.contrib.messages.views import SuccessMessageMixin
from django.core.urlresolvers import reverse_lazy
from django.views.generic import FormView
class LoginView(SuccessMessageMixin, FormView):
form_class = AuthenticationForm
template_name = 'login.html'
success_url = reverse_lazy('home') # url's name to redirect
success_message = 'Welcome back %(username)s!' # A welcome message
def form_valid(self, form):
user = form.get_user()
login(self.request, user)
return super(LoginView, self).form_valid(form)
And for the logout is enough with a function view, and the django messages framework:
from django.contrib.auth.views import logout
from django.http import HttpResponseRedirect
def logout_view(request):
logout(request)
messages.success(request, u"You have logout successfully!") # custom message for success logout
return HttpResponseRedirect('/')
Add the urls to your urls.py file:
from django.conf.urls import patterns, url
from django.views.generic import TemplateView
from .views import LoginView, logout_view
urlpatterns = patterns('',
url(r'^$', TemplateView.as_view(template_name='index.html'), name='home'),
url(r'^login/$', LoginView.as_view(), name='login'),
url(r'^logout/$', logout_view, name='logout'),
)
When the action occurs the messages object is available in the template, so just use a loop to show the messages, index.html:
<body>
{% if user.is_authenticated %}
<a href="{% url 'logout' %}">log out</a>
{% else %}
<a href="{% url 'login' %}">login</a>
{% endif %}
Some content
{% if messages %}
{% for message in messages %}
<div id='message-alert' class='alert alert-success'>
{{ message }}
</div>
{% endfor %}
{% endif %}
more content
</body>
You also need to render the login form in login.html:
{% if user.is_authenticated %}
<p>You are authenticated as <span class="text-success">{{ user.username }}</span></p>
<a href="{% url 'logout' %}">Log out</a>
{% else %}
<form method="post">
{{ form.as_p }}
{% csrf_token %}
<button class="btn">Login</button>
</form>
{% endif %}
Note: the css classes come from bootstrap, if it's the case GOOD, else just use your own.