Class Based Views which takes forms throught AJAX and returns JSON response. Response includes:
- status of request
- validation errors, if any
- messages from django messages framework, if any
- url for redirection or result object, in case of success
Installation:
pip install -U django-formalizr
Add "formalizr" to your INSTALLED_APPS setting like this:
INSTALLED_APPS = ( ... 'formalizr', )
Inherit your form views from formalizr.views.AjaxFormView:
from formalizr.views import AjaxFormView class SampleFormView(AjaxFormView): form_class = SampleForm
Make AJAX requests to your views and process JSON responses
Available view classes are: AjaxFormView, AjaxCreateView and AjaxUpdateView. Their purpose must be obvious.
In simplest case, when form processed without errors and messages, HTTP 200 OK is returned with application/json:
{ "status": "redirect", "location": "/path/to/some/view/" }
View's method get_success_url() is used to get the redirect location.
If _return=result parameter is included into request, then JSON representation of result is returned:
{ "status": "success", "object": {"pk":1}, "messages": [{"level": "info", "message": "Object created!"}] }
View's method get_json_object() is used to dump result into dict, later this dict is dumped into JSON. Messages are included into response.
In case of errors, HTTP 400 Bad Request is returned with application/json content:
{ "status": "error", "error": "Bad Request" "errors": { "__all__": ["Common form errors"], "name": ["This field is required"], "email": ["Please enter valid email address"] } }
If form comes with prefix, then names of all fields will have same prefix.