我正在尝试在 Django 中编写我的第一个中间件。
class RefreshBalance:
def process_view(self, request, view_func, view_args, view_kwargs):
pass
我想检测是否调用了视图并刷新余额。我可以看到“视图”参数,但不知道如何使用它?例如:
if view == "login.dashboard:
pass
如何找出正在调用的视图?
我正在尝试在 Django 中编写我的第一个中间件。
class RefreshBalance:
def process_view(self, request, view_func, view_args, view_kwargs):
pass
我想检测是否调用了视图并刷新余额。我可以看到“视图”参数,但不知道如何使用它?例如:
if view == "login.dashboard:
pass
如何找出正在调用的视图?
从中间件文档:
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
要回答这个问题:
我可以看到“视图”参数,但不知道如何使用它?
那么你就没有使用 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
。
享受能够弄清楚发生了什么!