Буквально пару строк кода добавили массу дополнительных возможностей.
теперь если функция cp_before возвратит значение – это значит это и будет результатом всего запроса. Появилась функция cp_after которая вызывается в конце всей обработки
результат работы функций cp__* может быть не обязательно наследник HttpResponse, но и любая другая структура языка, которая уже будет преобразована к оному с помощью функции cp_prepare
Вот собственно необходимые доработки в классе AddNewUrl :
-
def __call__(self,*t,**k):
-
if 'before' in self.prefix :
-
ret = self.prefix['before'](*t,**k)
-
if ret:
-
return ret
-
ret = self.view(*t,**k)
-
if 'prepare' in self.prefix:
-
newret = self.prefix['prepare'](ret,*t,**k)
-
if newret: ret = newret
-
if 'after' in self.prefix:
-
self.prefix['after'](*t,**k)
-
return ret
теперь, к примеру задача вывода JSON структуры сводится к
-
from django.http import HttpResponse
-
import simplejson as json
-
class BaseViews(object):
-
def prepare_cp(self,response,request):
-
return HttpResponse(json.dumps(response))
-
def cp__all_rooms(self,request):
-
return {'hi':'World','id':request.GET.get('id')}





Recent Comments