Create a Session in Django
Assuming you want database based sessions (Django also offers file based sessions, and cache based sessions):
- Open settings.py and find
MIDDLEWARE_CLASSES
. Add'django.contrib.sessions.middleware.SessionMiddleware'
to the list. - Find
INSTALLED_APPS
in the same file and add'django.contrib.sessions'
there. - Run
manage.py syncdb
from the command line.
After the initial setup you can use request.session
in your views to store information between requests.
For example this will store the information:
request.session['name'] = 'Ludwik'
and you can retrieve it as easly:
print request.session['name']
or
if request.session['name'] == 'Ludwik': print 'you are awesome!'
For other things you can do with the request.session
object see the documentation.
Ludwik's answer is the way to go, but if you want a gentler intro into the world of Django, (the (free) Django Book) is a must-read. Chapter 15 deals with sessions.
MIDDLEWARE_CLASSES should have −
'django.contrib.sessions.middleware.SessionMiddleware'
INSTALLED_APPS should have −
'django.contrib.sessions'
Change our login view to save our username cookie server side −
def login(request): username = 'not logged in' if request.method == 'POST': MyLoginForm = LoginForm(request.POST) if MyLoginForm.is_valid(): username = MyLoginForm.cleaned_data['username'] request.session['username'] = username else: MyLoginForm = LoginForm() return render(request, 'loggedin.html', {"username" : username}
create formView view for the login form, where we won’t display the form if cookie is set −
def formView(request): if request.session.has_key('username'): username = request.session['username'] return render(request, 'loggedin.html', {"username" : username}) else: return render(request, 'login.html', {})
change the url.py file to change the url so it pairs with our new view −
from django.conf.urls import patterns, urlfrom django.views.generic import TemplateViewurlpatterns = patterns('myapp.views', url(r'^connection/','formView', name = 'loginform'), url(r'^login/', 'login', name = 'login')) url(r'^logout/', 'logout', name = 'logout'),
create a simple logout view that erases our cookie.
def logout(request): try: del request.session['username'] except: pass return HttpResponse("<strong>You are logged out.</strong>")