如何从request_finished信号回调中访问请求?

Joh*_*Mee 8 django

如何使用request_finished信号获取和使用HttpRequest?

有兴趣提取用于记录目的的URL.

当前代码看起来像这样:

import logging

def write_to_file(sender, **kwargs):
    logging.debug(type(sender))
    logging.debug(dir(sender))

from django.core.signals import request_finished
request_finished.connect(write_to_file)
Run Code Online (Sandbox Code Playgroud)

生成这个

2010-03-03 13:18:44,602 DEBUG <type 'type'>
2010-03-03 13:18:44,602 DEBUG ['__call__', '__class__', '__delattr__', '__dict__', '__doc__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__str__', '__weakref__', '_get_traceback', 'apply_response_fixes', 'get_response', 'handle_uncaught_exception', 'initLock', 'load_middleware', 'request_class', 'response_fixes']
Run Code Online (Sandbox Code Playgroud)

Ofr*_*viv -3

尝试

sender.request_class.get_full_path()
Run Code Online (Sandbox Code Playgroud)

或者

sender.request_class._get_request()
Run Code Online (Sandbox Code Playgroud)

或者,如果您想尝试使用middleware执行此操作,正如 mountainwhim 建议的那样,这里有一个演示使用 middleware 请求计时的片段

  • 使困惑。这回答了OP的问题吗?在请求类上调用任何未绑定的方法只会导致抱怨它没有“self”参数。(因为,你知道,它是不受约束的。) (3认同)