From 216baa551fdce6394aa640ee0806c79b38658daf Mon Sep 17 00:00:00 2001 From: "tom christie tom@tomchristie.com" Date: Thu, 27 Jan 2011 21:09:25 +0000 Subject: [PATCH] Login/Logout and FlyWheel API link in HTML emitter --- examples/settings.py | 4 + examples/urls.py | 2 + flywheel/emitters.py | 15 +++- flywheel/resource.py | 2 - flywheel/templates/emitter.html | 150 +++++++++++++++++--------------- flywheel/utils.py | 10 +++ 6 files changed, 109 insertions(+), 74 deletions(-) diff --git a/examples/settings.py b/examples/settings.py index f85e75f16..ea97d1924 100644 --- a/examples/settings.py +++ b/examples/settings.py @@ -1,4 +1,7 @@ # Django settings for src project. +import os + +BASE_DIR = os.path.dirname(__file__) DEBUG = True TEMPLATE_DEBUG = DEBUG @@ -81,6 +84,7 @@ TEMPLATE_DIRS = ( # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates". # Always use forward slashes, even on Windows. # Don't forget to use absolute paths, not relative paths. + os.path.join(BASE_DIR, 'templates') ) INSTALLED_APPS = ( diff --git a/examples/urls.py b/examples/urls.py index ef55e2b56..5e308f00b 100644 --- a/examples/urls.py +++ b/examples/urls.py @@ -7,6 +7,8 @@ urlpatterns = patterns('', (r'pygments-example/', include('pygments_api.urls')), (r'^blog-post-example/', include('blogpost.urls')), (r'^object-store-example/', include('objectstore.urls')), + (r'^accounts/login/$', 'django.contrib.auth.views.login'), + (r'^accounts/logout/$', 'django.contrib.auth.views.logout'), (r'^admin/doc/', include('django.contrib.admindocs.urls')), (r'^admin/', include(admin.site.urls)), ) diff --git a/flywheel/emitters.py b/flywheel/emitters.py index 4ba2d92d8..458fa68cf 100644 --- a/flywheel/emitters.py +++ b/flywheel/emitters.py @@ -1,9 +1,10 @@ +from django.conf import settings from django.template import RequestContext, loader from django import forms from flywheel.response import NoContent -from utils import dict2xml +from utils import dict2xml, url_resolves import string try: import json @@ -12,6 +13,7 @@ except ImportError: + class BaseEmitter(object): media_type = None @@ -118,13 +120,22 @@ class DocumentingTemplateEmitter(BaseEmitter): content = self._get_content(self.resource, output) form_instance = self._get_form_instance(self.resource) + if url_resolves(settings.LOGIN_URL) and url_resolves(settings.LOGOUT_URL): + login_url = "%s?next=%s" % (settings.LOGIN_URL, self.resource.request.path) + logout_url = "%s?next=%s" % (settings.LOGOUT_URL, self.resource.request.path) + else: + login_url = None + logout_url = None + template = loader.get_template(self.template) context = RequestContext(self.resource.request, { 'content': content, 'resource': self.resource, 'request': self.resource.request, 'response': self.resource.response, - 'form': form_instance + 'form': form_instance, + 'login_url': login_url, + 'logout_url': logout_url, }) ret = template.render(context) diff --git a/flywheel/resource.py b/flywheel/resource.py index 36f497923..cc566752b 100644 --- a/flywheel/resource.py +++ b/flywheel/resource.py @@ -7,9 +7,7 @@ from flywheel.response import status, Response, ResponseException from decimal import Decimal import re -from itertools import chain -# TODO: Display user login in top panel: http://stackoverflow.com/questions/806835/django-redirect-to-previous-page-after-login # TODO: Figure how out references and named urls need to work nicely # TODO: POST on existing 404 URL, PUT on existing 404 URL # diff --git a/flywheel/templates/emitter.html b/flywheel/templates/emitter.html index 93f4cb494..7078eafd7 100644 --- a/flywheel/templates/emitter.html +++ b/flywheel/templates/emitter.html @@ -5,6 +5,11 @@