-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathdjango_middleware_sample.py
More file actions
68 lines (54 loc) · 1.95 KB
/
Copy pathdjango_middleware_sample.py
File metadata and controls
68 lines (54 loc) · 1.95 KB
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
class BaseMiddleware:
def __init__(self, do_something):
self.do_something = do_something
super().__init__()
def __call__(self, request):
response = None
if hasattr(self, 'process_request'):
response = self.process_request(request)
print(f'BaseMiddleware process_request {response}')
if not response:
response = self.do_something(request)
if hasattr(self, 'process_response'):
response = self.process_response(request, response)
print(f'BaseMiddleware process_response {response}')
return response
class MiddlewareOne(BaseMiddleware):
def process_request(self, request):
print('Middleware 1 in')
def process_response(self, request, response):
print('Middleware 1 out')
return response
class MiddlewareTwo(BaseMiddleware):
def process_request(self, request):
print('Middleware 2 in')
def process_response(self, request, response):
print('Middleware 2 out')
return response
class Handler:
def __init__(self):
super().__init__()
self.load_middleware()
def __call__(self, wgsi_request):
response = self.middleware_chain(wgsi_request)
return response
def load_middleware(self):
handler = wrap(do_something)
for middleware in [MiddlewareTwo, MiddlewareOne]:
mw_instance = middleware(handler)
handler = wrap(mw_instance)
self.middleware_chain = handler
def wrap(do_something):
def inner(request):
print(f'warp in {request}')
response = do_something(request)
print(f'warp out {response}')
return response
return inner
def do_something(request):
print('do_something')
response = f'this is response {request}'
return response
if __name__ == '__main__':
middleware = Handler()
middleware('xxx')