From: Thierry Parmentelat <thierry.parmentelat@inria.fr>
Date: Mon, 10 Dec 2012 17:07:42 +0000 (+0100)
Subject: can logout
X-Git-Tag: myslice-django-0.1-1~151
X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=0c525feb926047f2b9e6cef63121d2d454aff35b;p=unfold.git

can logout
---

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<name>[\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 @@
+<a href='/logout/confirm/'>Confirm logout</a>