Django中间件并获取视图名称?

时间:2013-06-10 13:59:46

标签: django

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

class RefreshBalance:

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

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

if view == "login.dashboard:
   pass

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

2 个答案:

答案 0 :(得分:2)

来自middleware documentation

  

process_view(self,request,view_func,view_args,   view_kwargs)request是一个HttpRequest对象。 view_func是Python   Django即将使用的功能。 (这是实际的功能   对象,而不是函数的名称作为字符串。)

所以你需要做一些事情:

from login import dashboard


if view_func.__name__ == dashboard.__name__:
    pass

答案 1 :(得分:0)

回答问题:

<块引用>

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

那你就没有使用 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 的值,输入 view.bar_attrbiute,然后打印出来。

完成播放后,输入 c 继续,q 退出,n 转到下一行,或 s 步。

如果您研究python debugger,还有更多。

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