当它不是处理程序时,如何在 aiohttp 中获取当前请求
how do you get current request's in aiohttp when it isn't a handler
我有一个 aiohttp 应用程序,它有一些使用嵌套应用程序创建的端点。
我的用例是处理请求后,我希望 return 不是 web.response 格式,而是客户端在其请求 header 中请求的任何格式(可能是csv、json、html 等)。
所以我使用了一个装饰器,并从那个装饰器包装器中获取当前请求以了解 header format
并处理对该类型的响应。
我的问题是如何获取当前请求的上下文。我知道烧瓶中没有像 current_app
这样的东西,所以做我想做的最好的事情是什么。
下面我贴出一些解释以上内容的代码:
@subapp_routes.get('')
@subapp_routes.get('/{c_id}')
@format_output
async def index(request):
print(request)
c_id = request.match_info.get('c_id', None)
return await get_index(c_id)
def format_data_object(data):
status = 200
mime = _most_acceptable_format(request, data) # HOW TO PASS THIS CURRENT request AS CURRENTLY THIS ISN'T GETTING RECOGNIZED. I TRIED aiohttp.request and aiohttp.web.request but get not recognized, so not sure now
if mime == MIME_DATAFRAME:
return _render_dataframe(data, status)
elif mime == MIME_CSV:
return _render_csv(data, status)
elif mime == MIME_JSON:
return _render_json(data, status)
elif mime == MIME_HTML:
return _render_html(data, status)
raise InvalidRequest('unrecognized format: "%s"' % mime)
def format_output(function):
"""
Output format decorator.
"""
@wraps(function)
def wrapper(*args, **kwargs):
try:
data = function(*args, **kwargs)
return format_data_object(data)
except Exception as ex:
return handle_error(ex)
return wrapper
flask
惯坏人。
如果您需要整个请求、数据库连接或其他资源——明确地将其传递给被调用的函数。
非常明显和优雅的方式,不需要任何隐式上下文命名空间魔法。
请将诸如线程局部变量之类的东西留给系统工具,为了简单和可读性,用户代码不应使用它们。
我有一个 aiohttp 应用程序,它有一些使用嵌套应用程序创建的端点。
我的用例是处理请求后,我希望 return 不是 web.response 格式,而是客户端在其请求 header 中请求的任何格式(可能是csv、json、html 等)。
所以我使用了一个装饰器,并从那个装饰器包装器中获取当前请求以了解 header format
并处理对该类型的响应。
我的问题是如何获取当前请求的上下文。我知道烧瓶中没有像 current_app
这样的东西,所以做我想做的最好的事情是什么。
下面我贴出一些解释以上内容的代码:
@subapp_routes.get('')
@subapp_routes.get('/{c_id}')
@format_output
async def index(request):
print(request)
c_id = request.match_info.get('c_id', None)
return await get_index(c_id)
def format_data_object(data):
status = 200
mime = _most_acceptable_format(request, data) # HOW TO PASS THIS CURRENT request AS CURRENTLY THIS ISN'T GETTING RECOGNIZED. I TRIED aiohttp.request and aiohttp.web.request but get not recognized, so not sure now
if mime == MIME_DATAFRAME:
return _render_dataframe(data, status)
elif mime == MIME_CSV:
return _render_csv(data, status)
elif mime == MIME_JSON:
return _render_json(data, status)
elif mime == MIME_HTML:
return _render_html(data, status)
raise InvalidRequest('unrecognized format: "%s"' % mime)
def format_output(function):
"""
Output format decorator.
"""
@wraps(function)
def wrapper(*args, **kwargs):
try:
data = function(*args, **kwargs)
return format_data_object(data)
except Exception as ex:
return handle_error(ex)
return wrapper
flask
惯坏人。
如果您需要整个请求、数据库连接或其他资源——明确地将其传递给被调用的函数。
非常明显和优雅的方式,不需要任何隐式上下文命名空间魔法。
请将诸如线程局部变量之类的东西留给系统工具,为了简单和可读性,用户代码不应使用它们。