diff gpp/core/views.py @ 186:be3fff614b93

Implement #66; use jQuery UI autocomplete widget to replace obsolete jquery-autocomplete plugin. I implemented a very simple caching system.
author Brian Neal <bgneal@gmail.com>
date Tue, 30 Mar 2010 01:30:32 +0000
parents ab7830b067b3
children
line wrap: on
line diff
--- a/gpp/core/views.py	Sun Mar 28 23:25:10 2010 +0000
+++ b/gpp/core/views.py	Tue Mar 30 01:30:32 2010 +0000
@@ -4,12 +4,12 @@
 """
 from django.contrib.auth.models import User
 from django.http import HttpResponse
-from django.http import HttpResponseBadRequest
-from django.http import HttpResponseForbidden
 from django.shortcuts import render_to_response
 from django.template import RequestContext
 from django.contrib.auth.decorators import login_required
 from django.views.decorators.http import require_GET
+import django.utils.simplejson as json
+
 
 @login_required
 @require_GET
@@ -23,20 +23,16 @@
 
 def ajax_users(request):
     """
-    If the user is authenticated, return a string of usernames whose names start with
-    the 'q' GET parameter, limited by the 'limit' GET parameters. The names are separated
-    by newlines. Only active usernames are returned.
-    If the user is not authenticated, return an empty string.
+    If the user is authenticated, return a JSON array of strings of usernames 
+    whose names start with the 'q' GET parameter, limited by the 'limit' GET 
+    parameter. Only active usernames are returned.
+    If the user is not authenticated, return an empty array.
     """
     q = request.GET.get('q', None)
-    if q is None:
-        return HttpResponseBadRequest()
+    if q is None or not request.user.is_authenticated():
+        return HttpResponse(json.dumps([]), content_type='application/json')
 
-    if request.user.is_authenticated():
-        q = request.GET.get('q', ' ')
-        limit = int(request.GET.get('limit', 10))
-        users = User.objects.filter(is_active=True, 
-                username__istartswith=q).values_list('username', flat=True)[:limit]
-        user_list = u"\n".join(users)
-        return HttpResponse(user_list)
-    return HttpResponseForbidden()
+    limit = int(request.GET.get('limit', 10))
+    users = User.objects.filter(is_active=True, 
+            username__istartswith=q).values_list('username', flat=True)[:limit]
+    return HttpResponse(json.dumps(list(users)), content_type='application/json')