打印或返回请求参数/表单d

2024-09-28 17:17:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一个flask应用程序中使用wsgi请求记录器https://github.com/pklaus/wsgi-request-logger,需要它同时记录请求参数(即将随请求一起发送的参数)。在

使用请求.窗体或者请求.args不工作,然后返回-

RuntimeError:在请求上下文之外工作。在


val['params'] = url_decode(environ.get('QUERY_STRING', '')) print val['params']

这不起作用,并返回MultiDict([])(在中间件和视图.py文件,对于这两种情况都返回相同的结果)。在


if environ['REQUEST_METHOD'] == 'POST':
   print parse_form_data(environ)[1]

这也返回MultiDict[]。在

我不知道我错过了什么。帮个忙就好了。在


调用中间件的代码。我编辑了一下中间件,并将文件名改为request_logger_wsgi,因为我现在正在用本地克隆测试它。在

^{pr2}$

Tags: 中间件httpsgithub应用程序flaskwsgi参数request
1条回答
网友
1楼 · 发布于 2024-09-28 17:17:24

你应该发布更多的应用程序代码,否则很难帮上忙。在

在WSGI层中不能使用Flask的request对象。wsgi-request-logger在Flask之前运行,这就是为什么还没有请求上下文。在

其他代码可能在模块中运行,并且使用了os.environ,这与WSGI环境不同。在

您实际上要做的是创建一个自定义格式化程序并告诉

def query_formatter(status_code, environ, content_length):
    return "{0} {1} {2}".format(dt.now().isoformat(), status_code,
                                environ.get('QUERY_STRING', ''))

然后设置格式化程序:

^{pr2}$

不过,最好是重用其中一个Apache格式化程序:

import requestlogger

def apache_query_formatter(status_code, environ, content_length):
    return requestlogger.ApacheFormatters.format_NCSA_log(
        status_code, environ, content_length) + environ.get('QUERY_STRING', '')

此格式化程序将使用NCSA格式并附加查询字符串。可能有更好的日志消息格式,但这应该让您开始。在

相关问题 更多 >