class BaseView(object):
def __new__(cls, request, *args, **kwargs):
self = object.__new__(cls)
self.args = args
self.kwargs = kwargs
self.request = request
self.__init__()
return self.handle_request()
def __init__(self):
pass
def handle_request(self):
if self.request.method == "POST":
return self.handle_post(*self.args, **self.kwargs)
else:
return self.handle_get(*self.args, **self.kwargs)
def handle_get(self):
raise NotImplementedError(self.handle_get)
def handle_post(self):
raise NotImplementedError(self.handle_post)
if __name__ == "__main__":
class TestView(BaseView):
def handle_post(self, value="foo"):
return "post called with %r" % value
class FakeRequest(object):
method = "POST"
req = FakeRequest()
print TestView(req)
print TestView(req, "bar")
Comments
Why not:
???
#
pakalk: Because inheritance does not work with nested functions. View classes can be extended and code can be reused. My example isn't complete - I just wanted to show how it can be done. Like BaseView a class for e.g. a RestfulView could be created.
#