Add GET support to AjaxCommandMixin
This commit is contained in:
parent
90c2fb381b
commit
f73dc7c3cf
|
@ -1,9 +1,10 @@
|
||||||
Changelog
|
Changelog
|
||||||
=========
|
=========
|
||||||
|
|
||||||
0.7.2 (Unreleased)
|
0.7.2
|
||||||
------------------
|
-----
|
||||||
|
|
||||||
|
* Add GET support to AjaxCommandMixin
|
||||||
* Enhanced json encoder, available in AjaxCommandsMixin
|
* Enhanced json encoder, available in AjaxCommandsMixin
|
||||||
* Add Shakarina to collaborators, thanks!
|
* Add Shakarina to collaborators, thanks!
|
||||||
|
|
||||||
|
|
37
gas/views.py
37
gas/views.py
|
@ -17,6 +17,32 @@ from . import utils
|
||||||
|
|
||||||
|
|
||||||
class AjaxCommandsMixin:
|
class AjaxCommandsMixin:
|
||||||
|
"""
|
||||||
|
Mixin class for views with javascript interaction.
|
||||||
|
|
||||||
|
Allows defining several commands (POST or GET) on a diferent
|
||||||
|
method per command. A request is identified as a command if it has
|
||||||
|
a `command` field in the request.
|
||||||
|
|
||||||
|
To react to a POST command define a method starting with `do_`.
|
||||||
|
For example a request with a command named `store_answer` will be
|
||||||
|
processed in the method `do_store_answer`.
|
||||||
|
|
||||||
|
Similarly, to react to a GET command define a method starting with
|
||||||
|
`send_`. For example a request with a command named `user_list` will be
|
||||||
|
processed in the method `send_user_list`.
|
||||||
|
|
||||||
|
If the request has no command then it will be processed like in
|
||||||
|
any other DJango view.
|
||||||
|
|
||||||
|
If the request has a command not defined in the view it will get a
|
||||||
|
400 response (Bad Request).
|
||||||
|
|
||||||
|
The helper `render_json` method allows returning an
|
||||||
|
application/json with automatic serialization of the given python
|
||||||
|
data. It uses the extended json encoder allowing serialization of
|
||||||
|
queryets, lazy strings, dates, etc.
|
||||||
|
"""
|
||||||
def post(self, request, *args, **kwargs):
|
def post(self, request, *args, **kwargs):
|
||||||
if 'command' in self.request.POST:
|
if 'command' in self.request.POST:
|
||||||
command_processor = getattr(self, 'do_{0}'.format(self.request.POST['command']), None)
|
command_processor = getattr(self, 'do_{0}'.format(self.request.POST['command']), None)
|
||||||
|
@ -28,6 +54,17 @@ class AjaxCommandsMixin:
|
||||||
handler = getattr(super(), 'post', self.http_method_not_allowed)
|
handler = getattr(super(), 'post', self.http_method_not_allowed)
|
||||||
return handler(request, *args, **kwargs)
|
return handler(request, *args, **kwargs)
|
||||||
|
|
||||||
|
def get(self, request, *args, **kwargs):
|
||||||
|
if 'command' in self.request.GET:
|
||||||
|
command_processor = getattr(self, 'send_{0}'.format(self.request.GET['command']), None)
|
||||||
|
if command_processor is not None:
|
||||||
|
return command_processor()
|
||||||
|
else:
|
||||||
|
return HttpResponseBadRequest()
|
||||||
|
else:
|
||||||
|
handler = getattr(super(), 'get', self.http_method_not_allowed)
|
||||||
|
return handler(request, *args, **kwargs)
|
||||||
|
|
||||||
def render_json(self, data, encoder=utils.JSONEncoder):
|
def render_json(self, data, encoder=utils.JSONEncoder):
|
||||||
return HttpResponse(
|
return HttpResponse(
|
||||||
json.dumps(data, indent=2, cls=encoder),
|
json.dumps(data, indent=2, cls=encoder),
|
||||||
|
|
Loading…
Reference in New Issue