3

我正在尝试在 Django 中编写我的第一个中间件。

class RefreshBalance:

    def process_view(self, request, view_func, view_args, view_kwargs):
        pass

我想检测是否调用了视图并刷新余额。我可以看到“视图”参数,但不知道如何使用它?例如:

if view == "login.dashboard:
   pass

如何找出正在调用的视图?

4

2 回答 2

2

中间件文档

process_view(self, request, view_func, view_args, view_kwargs) 请求是一个 HttpRequest 对象。view_func 是 Django 即将使用的 Python 函数。(它是实际的函数对象,而不是字符串形式的函数名称。)

因此,您需要执行以下操作:

from login import dashboard


if view_func.__name__ == dashboard.__name__:
    pass
于 2013-06-10T14:10:06.133 回答
0

要回答这个问题:

我可以看到“视图”参数,但不知道如何使用它?

那么你就没有使用 python 的力量和美丽。

试试这个:

breakpoint()
if view == "login.dashboard:
   pass

这将暂停执行,并允许您在代码中与 python 交互。

一旦它暂停执行,我要做的第一件事就是list<ENTER>在它停止的地方列出代码,只是为了确定自己的方向。

想看看是什么类型的对象view?输入type(view),现在你知道了!

想知道它有哪些方法和属性dir(view),现在就知道了。或者pp dir(view)漂亮地打印它。

哦,它有一个foo_very_interesting_method,试试:

solong = view.foo_very_interesting_method
help(solong)

如果你幸运的话,它会打印一些有用的信息。

想查看 view.bar_attribute、type 的值view.bar_attrbiute,并为您打印。

完成演奏后键入c继续、q退出、n转到下一行或s步进。

如果你研究的话,还有更多python debugger

享受能够弄清楚发生了什么!

于 2021-08-07T10:15:01.370 回答