From 0c525feb926047f2b9e6cef63121d2d454aff35b Mon Sep 17 00:00:00 2001 From: Thierry Parmentelat Date: Mon, 10 Dec 2012 18:07:42 +0100 Subject: [PATCH] can logout --- auth/views.py | 18 +++++++++++++++++- myslice/urls.py | 4 ++++ slice/views.py | 16 ++++++++++------ templates/view-logout.html | 6 ++++++ templates/widget-logout.html | 1 + 5 files changed, 38 insertions(+), 7 deletions(-) create mode 100644 templates/view-logout.html create mode 100644 templates/widget-logout.html diff --git a/auth/views.py b/auth/views.py index 817fb631..f5db82d2 100644 --- a/auth/views.py +++ b/auth/views.py @@ -2,7 +2,7 @@ from django.core.context_processors import csrf from django.template import RequestContext from django.shortcuts import render_to_response -from django.contrib.auth import authenticate, login +from django.contrib.auth import authenticate, login, logout from django.http import HttpResponseRedirect from auth.backend import MyCustomBackend @@ -34,3 +34,19 @@ def login_user(request): state='Welcome to MySlice' env['state']=state; env['username']='' return render_to_response('view-login.html',env, context_instance=RequestContext(request)) + +# hard question : where should we redirect requests to logout if user is not logged in ? +def logout_user (request): + # xxx check that we're indeed logged in + if not request.user.is_authenticated(): + return HttpResponseRedirect ('/') + return render_to_response('view-logout.html',{},context_instance=RequestContext(request)) + +def do_logout_user (request): + # xxx check that we're indeed logged in + if not request.user.is_authenticated(): + return HttpResponseRedirect ('/') + logout(request) + return HttpResponseRedirect ('/') + + diff --git a/myslice/urls.py b/myslice/urls.py index ab67f550..b4a1b1c8 100644 --- a/myslice/urls.py +++ b/myslice/urls.py @@ -20,7 +20,11 @@ urlpatterns = patterns( # Uncomment the next line to enable the admin: # url(r'^admin/', include(admin.site.urls)), (r'^/?$', 'slice.views.fake_slice_view'), + # seems to be what login_required uses to redirect ... + (r'^accounts/login/$', 'auth.views.login_user'), (r'^login/?$', 'auth.views.login_user'), + (r'^logout/?$', 'auth.views.logout_user'), + (r'^logout/confirm/?$', 'auth.views.do_logout_user'), (r'^slice/?$', 'slice.views.fake_slice_view'), (r'^slice/(?P[\w\.]+)/?$', 'slice.views.fake_slice_view'), (r'^tab/?$', 'slice.views.tab_view'), diff --git a/slice/views.py b/slice/views.py index 9bfe1abf..2a1e4783 100644 --- a/slice/views.py +++ b/slice/views.py @@ -14,15 +14,19 @@ Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh standard_menu_items = [ { 'label':'Tab view', 'href': '/tab/'}, { 'label':'Slice view', 'href': '/slice/'}, { 'label':'Scroll view', 'href': '/scroll/'}, - { 'label':'Login', 'href':'/login/'}, ] -def menu_items (current): +login_out_items = { False: { 'label':'Login', 'href':'/login/'}, + True: { 'label':'Logout', 'href':'/logout/'}} + +def menu_items (current,request=None): result=deepcopy(standard_menu_items) for d in result: if d['label'].lower().find(current)>=0: d['active']=True + if not request: return result + has_user=request.user.is_authenticated() + result.append (login_out_items [ has_user] ) return result - hard_wired_slice_names = [] for site in [ 'inria', 'upmc' , 'ibbt' ]: @@ -36,7 +40,7 @@ def fake_slice_view (request, name=None): 'name':name, 'slices': hard_wired_slice_names, 'content_main' : lorem, - 'menu_items' : menu_items('slice'), + 'menu_items' : menu_items('slice',request), }, context_instance=RequestContext(request)) @@ -46,7 +50,7 @@ def fake_slice_view (request, name=None): def tab_view (request): return render_to_response ('view-tab.html', { 'lorem': lorem, - 'menu_items': menu_items('tab'), + 'menu_items': menu_items('tab',request), }, context_instance=RequestContext(request)) @@ -54,6 +58,6 @@ def tab_view (request): def scroll_view (request): return render_to_response ('view-scroll.html', { 'lorem':lorem, - 'menu_items': menu_items('scroll'), + 'menu_items': menu_items('scroll',request), }, context_instance=RequestContext(request)) diff --git a/templates/view-logout.html b/templates/view-logout.html new file mode 100644 index 00000000..0433628f --- /dev/null +++ b/templates/view-logout.html @@ -0,0 +1,6 @@ +{% extends 'layout-myslice.html' %} + +{% block content_main %} +{% include 'widget-logout.html' %} +{% endblock %} + diff --git a/templates/widget-logout.html b/templates/widget-logout.html new file mode 100644 index 00000000..97e7a0ae --- /dev/null +++ b/templates/widget-logout.html @@ -0,0 +1 @@ +Confirm logout -- 2.43.0