1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
|
from django.core.paginator import Paginator
from piston.handler import BaseHandler
from piston.utils import rc, validate
from models import TestModel, ExpressiveTestModel, Comment, InheritedModel, PlainOldObject, Issue58Model, ListFieldsModel
from forms import EchoForm
from test_project.apps.testapp import signals
class EntryHandler(BaseHandler):
model = TestModel
allowed_methods = ['GET', 'PUT', 'POST']
def read(self, request, pk=None):
signals.entry_request_started.send(sender=self, request=request)
if pk is not None:
return TestModel.objects.get(pk=int(pk))
paginator = Paginator(TestModel.objects.all(), 25)
return paginator.page(int(request.GET.get('page', 1))).object_list
def update(self, request, pk):
signals.entry_request_started.send(sender=self, request=request)
def create(self, request):
signals.entry_request_started.send(sender=self, request=request)
class ExpressiveHandler(BaseHandler):
model = ExpressiveTestModel
fields = ('title', 'content', ('comments', ('content',)))
@classmethod
def comments(cls, em):
return em.comments.all()
def read(self, request):
inst = ExpressiveTestModel.objects.all()
return inst
def create(self, request):
if request.content_type and request.data:
data = request.data
em = self.model(title=data['title'], content=data['content'])
em.save()
for comment in data['comments']:
Comment(parent=em, content=comment['content']).save()
return rc.CREATED
else:
super(ExpressiveHandler, self).create(request)
class AbstractHandler(BaseHandler):
fields = ('id', 'some_other', 'some_field')
model = InheritedModel
def read(self, request, id_=None):
if id_:
return self.model.objects.get(pk=id_)
else:
return super(AbstractHandler, self).read(request)
class PlainOldObjectHandler(BaseHandler):
allowed_methods = ('GET',)
fields = ('type', 'field')
model = PlainOldObject
def read(self, request):
return self.model()
class EchoHandler(BaseHandler):
allowed_methods = ('GET', 'HEAD')
@validate(EchoForm, 'GET')
def read(self, request):
return {'msg': request.form.cleaned_data['msg']}
class ListFieldsHandler(BaseHandler):
model = ListFieldsModel
fields = ('id','kind','variety','color')
list_fields = ('id','variety')
class Issue58Handler(BaseHandler):
model = Issue58Model
def read(self, request):
return Issue58Model.objects.all()
def create(self, request):
if request.content_type:
data = request.data
em = self.model(read=data['read'], model=data['model'])
em.save()
return rc.CREATED
else:
super(Issue58Model, self).create(request)
|