2 from django
.utils
import simplejson
3 from django
.http
import HttpResponse
, Http404
, HttpResponseServerError
4 from django
.http
import HttpResponseRedirect
5 from django
.utils
.functional
import Promise
6 from django
.utils
.translation
import force_unicode
7 from django
.utils
.simplejson
import JSONEncoder
8 from django
.conf
import settings
12 class LazyEncoder(simplejson
.JSONEncoder
):
14 if isinstance(o
, Promise
):
15 return force_unicode(o
)
17 return super(LazyEncoder
, self
).default(o
)
19 class JSONResponse(HttpResponse
):
20 def __init__(self
, data
):
22 HttpResponse
.__init
__(
23 self
, content
=simplejson
.dumps(data
, cls
=LazyEncoder
),
24 #mimetype="text/html",
28 # ajax_form_handler # {{{
29 def ajax_form_handler(
30 request
, form_cls
, require_login
=True, allow_get
=settings
.DEBUG
32 if require_login
and not request
.user
.is_authenticated():
33 raise Http404("login required")
34 if not allow_get
and request
.method
!= "POST":
35 raise Http404("only post allowed")
36 if isinstance(form_cls
, basestring
):
37 # can take form_cls of the form: "iwdb.app.forms.FormName"
38 from django
.core
.urlresolvers
import get_mod_func
39 mod_name
, form_name
= get_mod_func(form_cls
)
40 form_cls
= getattr(__import__(mod_name
, {}, {}, ['']), form_name
)
41 form
= form_cls(request
, request
.REQUEST
)
43 response
= form
.save()
45 return JSONResponse({ 'success': True, 'response': response
})
47 return HttpResponseRedirect(request
.META
.get("HTTP_REFERER", ""))
48 return JSONResponse({ 'success': False, 'errors': form
.errors
})
51 # ajax_validator # {{{
52 def ajax_validator(request
, form_cls
):
53 if isinstance(form_cls
, basestring
):
54 from django
.core
.urlresolvers
import get_mod_func
55 mod_name
, form_name
= get_mod_func(form_cls
)
56 form_cls
= getattr(__import__(mod_name
, {}, {}, ['']), form_name
)
57 form
= form_cls(request
.POST
)
58 if "field" in request
.GET
:
59 errors
= form
.errors
.get(request
.GET
["field"])
60 if errors
: errors
= errors
.as_text()
64 { "errors": errors
, "valid": not errors
}
70 settings
.WORD_FORM_DELIMITER
, form
, settings
.WORD_FORM_DELIMITER
73 # AJAXSimpleExceptionResponse www.djangosnippets.org/snippets/650/ # {{{
74 class AJAXSimpleExceptionResponse
:
75 def process_exception(self
, request
, exception
):
77 (exc_type
, exc_info
, tb
) = sys
.exc_info()
78 response
= "%s\n" % exc_type
.__name
__
79 response
+= "%s\n\n" % exc_info
80 response
+= "TRACEBACK:\n"
81 for tb
in traceback
.format_tb(tb
):
82 response
+= "%s\n" % tb
84 if not settings
.DEBUG
: return
85 if not request
.is_ajax(): return
86 return HttpResponseServerError(response
)