我想在中间件中访问request.url.
Flask app - test.py
from flask import Flask
from middleware import TestMiddleware
app = Flask(__name__)
app.wsgi_app = TestMiddleware(app.wsgi_app)
@app.route('/')
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
app.run()
Run Code Online (Sandbox Code Playgroud)
middleware.py:
from flask import request
class TestMiddleware(object):
def __init__(self, app):
self.app = app
def __call__(self, environ, start_response):
# How do I access request object here.
print "I'm in middleware"
return self.app(environ, start_response)
Run Code Online (Sandbox Code Playgroud)
我理解可以在Flask应用程序上下文中访问请求.我们通常使用
with app.test_request_context()
Run Code Online (Sandbox Code Playgroud)
但在中间件中,我无法访问Flask app对象.
我该怎么办?
谢谢你的帮助..
我有一个简单的清单.
>>> a = [0, 1, 2]
Run Code Online (Sandbox Code Playgroud)
我想使用列表推导从它创建一个新列表.
>>> b = [x*2 for x in a]
>>> b
[0, 2, 4]
Run Code Online (Sandbox Code Playgroud)
很简单,但是如果我只想操作非零元素呢?
'if'在列表推导中需要'else',所以我想出了这个.
>>> b = [x*2 if x != 0 else None for x in a]
>>> b
[None, 2, 4]
Run Code Online (Sandbox Code Playgroud)
但理想的结果是.
>>> b
[2, 4]
Run Code Online (Sandbox Code Playgroud)
我可以这样做
>>> a = [0, 1, 2]
>>> def f(arg):
... for x in arg:
... if x != 0:
... yield x*2
...
>>> list(f(a))
[2, 4]
Run Code Online (Sandbox Code Playgroud)
或使用'过滤器'和lambda
>>> a = [0, …Run Code Online (Sandbox Code Playgroud)