Revision c72a830d ui/userdata/rest.py
b/ui/userdata/rest.py | ||
---|---|---|
4 | 4 |
from django.core import serializers |
5 | 5 |
from django.core.urlresolvers import reverse |
6 | 6 |
|
7 |
from django.core.exceptions import ValidationError, NON_FIELD_ERRORS |
|
8 |
|
|
7 | 9 |
# base view class |
8 | 10 |
# https://github.com/bfirsh/django-class-based-views/blob/master/class_based_views/base.py |
9 | 11 |
class View(object): |
... | ... | |
62 | 64 |
raise http.HttpResponseServerError('Invalid JSON data.') |
63 | 65 |
else: |
64 | 66 |
raise http.HttpResponseServerError('Unsupported Content-Type.') |
67 |
try: |
|
68 |
return getattr(self, request.method.upper())(request, data, *args, **kwargs) |
|
69 |
except ValidationError, e: |
|
70 |
# specific response for validation errors |
|
71 |
return http.HttpResponseServerError(json.dumps({'errors': |
|
72 |
e.message_dict, 'non_field_key': |
|
73 |
NON_FIELD_ERRORS })) |
|
65 | 74 |
|
66 |
return getattr(self, request.method.upper())(request, data, *args, **kwargs) |
|
67 | 75 |
else: |
68 | 76 |
allowed_methods = [m for m in self.method_names if hasattr(self, m)] |
69 | 77 |
return http.HttpResponseNotAllowed(allowed_methods) |
... | ... | |
137 | 145 |
def PUT(self, request, data, *args, **kwargs): |
138 | 146 |
instance = self.instance() |
139 | 147 |
self.update_instance(instance, data, self.exclude_fields) |
148 |
instance.full_clean() |
|
140 | 149 |
instance.save() |
141 | 150 |
return self.GET(request, data, *args, **kwargs) |
142 | 151 |
|
... | ... | |
161 | 170 |
def POST(self, request, data, *args, **kwargs): |
162 | 171 |
instance = self.model() |
163 | 172 |
self.update_instance(instance, data, self.exclude_fields) |
173 |
instance.full_clean() |
|
164 | 174 |
instance.save() |
165 | 175 |
return self.json_response(self.instance_to_dict(instance, |
166 | 176 |
self.exclude_fields)) |
... | ... | |
184 | 194 |
instance = self.model() |
185 | 195 |
self.update_instance(instance, data, self.exclude_fields) |
186 | 196 |
instance.user = request.user |
197 |
instance.full_clean() |
|
187 | 198 |
instance.save() |
188 | 199 |
return self.json_response(self.instance_to_dict(instance, |
189 | 200 |
self.exclude_fields)) |
Also available in: Unified diff