Mercurial > hg > webob_view
comparison webob_view/template/+package+/+package+.py_tmpl @ 1:eb2cb7ebc849
moving to a handler architecture
author | k0s <k0scist@gmail.com> |
---|---|
date | Thu, 29 Oct 2009 15:08:54 -0400 |
parents | 72cb6dc31e3f |
children |
comparison
equal
deleted
inserted
replaced
0:72cb6dc31e3f | 1:eb2cb7ebc849 |
---|---|
1 """ | 1 """ |
2 ${repr(project)}: a view with webob | 2 ${repr(project)}: a view with webob |
3 """ | 3 """ |
4 | 4 |
5 from webob import Request, Response, exc | 5 from handlers import Get, Post |
6 from webob import Request, exc | |
6 | 7 |
7 class View(object): | 8 class Dispatcher(object): |
8 | 9 |
9 ### class level variables | 10 ### class level variables |
10 defaults = {} | 11 defaults = {} |
11 | 12 |
12 def __init__(self, **kw): | 13 def __init__(self, **kw): |
13 for key in self.defaults: | 14 for key in self.defaults: |
14 setattr(self, key, kw.get(key, self.defaults[key])) | 15 setattr(self, key, kw.get(key, self.defaults[key])) |
15 self.response_functions = { 'GET': self.get, | 16 self.handlers = [ Get, Post ] |
16 'POST': self.post, | |
17 } | |
18 | 17 |
19 ### methods dealing with HTTP | 18 ### methods dealing with HTTP |
20 def __call__(self, environ, start_response): | 19 def __call__(self, environ, start_response): |
21 request = Request(environ) | 20 request = Request(environ) |
22 res = self.make_response(request) | 21 for h in self.handlers: |
22 if h.match(request): | |
23 handler = h(request) | |
24 break | |
25 res = handler() | |
23 return res(environ, start_response) | 26 return res(environ, start_response) |
24 | |
25 def make_response(self, request): | |
26 return self.response_functions.get(request.method, self.error)(request) | |
27 | |
28 def get_response(self, text, content_type='text/html'): | |
29 res = Response(content_type=content_type, body=text) | |
30 return res | |
31 | |
32 def get(self, request): | |
33 """ | |
34 return response to a GET requst | |
35 """ | |
36 return self.get_response('Hello, world') | |
37 | |
38 def post(self, request): | |
39 """ | |
40 return response to a POST request | |
41 """ | |
42 return exc.HTTPOk("Ok") | |
43 | |
44 def error(self, request): | |
45 """deal with non-supported methods""" | |
46 return exc.HTTPMethodNotAllowed("Only %r operations are allowed" % self.response_functions.keys()) | |
47 |