Masonite Debugbar 调试工具
Masonite Debugbar
Masonite Debugbar 是一种非常有用的方式,它可以在开发过程中查看应用程序的统计信息。你可以使用此信息来帮助调试你正在遇到的错误,甚至可以针对速度和内存问题优化你的模型和查询。
Masonite Debugbar 还支持 AJAX 调用,你将能够在工具栏上直接看到一个下拉菜单。

安装
安装 Masonite Debugbar 很简单。
首先,安装包:
$ pip install masonite-debugbar
将提供者放在提供者列表的末尾:
from debugbar.providers import DebugProvider
PROVIDERS = [
#..
DebugProvider
]
然后发布包:
$ python craft package:publish debugbar
现在当你在应用程序中访问页面时,你将在页面底部看到一个调试栏。
配置
配置文件在收集器上创建
OPTIONS = {
"models": True,
"queries": True,
"request": True,
"measures": True,
"messages": True,
"environment": True,
}
并非所有收集器对你来说都是同样重要的,因此你可以将其中任何一个设置为 True
或 False
,以便在调试栏中启用或禁用它们。
收集器
Masonite Debugbar 收集数据以在调试栏中作为选项卡显示。每个收集器都是调试栏中的一个选项卡。
下面详细介绍了每个收集器。
模型收集器
模型收集器展示了在请求过程中有多少个模型被实例化。每当进行查询调用时,都必须创建一个模型实例来存储该行数据。这可能是一个代价高昂的操作,具体取决于你正在调用的表中有多少行数据。
Masonite Debugbar
Masonite Debugbar 是一种在开发过程中查看应用程序统计信息的非常有用的方法。您可以使用此信息来帮助调试您遇到的错误,甚至针对速度和内存问题优化您的模型和查询。
Masonite Debugbar 还支持 AJAX 调用,您可以直接在工具栏的下拉菜单中看到这些调用。

安装
设置 Masonite Debugbar 很简单。
首先,安装软件包:
$ pip install masonite-debugbar
将提供者放在提供者列表的末尾:
from debugbar.providers import DebugProvider
PROVIDERS = [
#..
DebugProvider
]
然后发布包:
$ python craft package:publish debugbar
现在,当您转到应用程序中的某个页面时,您将在页面底部看到一个调试栏。
配置
配置文件在收集器上创建
OPTIONS = {
"models": True,
"queries": True,
"request": True,
"measures": True,
"messages": True,
"environment": True,
}
并非所有收集器对您都同样重要,因此您可以将其中任何一个设置为 True
或 False
以便在调试栏中启用或禁用它们。
收集器
Masonite Debugbar 收集数据以在调试栏中显示为选项卡。每个收集器是调试栏中的 1 个选项卡。
下面是每个收集器的详细说明
模型收集器
模型收集器显示有多少模型根据该请求进行了水合。每当您进行查询调用时,都必须创建一个模型实例来存储该行数据。这可能是一项代价高昂的操作,具体取决于您调用的表中有多少行。
查询收集器
查询收集器显示在请求期间进行的所有查询以及执行查询所需的时间。使用它来查看应用程序中的瓶颈所在。慢查询会导致用户加载时间缓慢。
请求收集器
请求收集器显示与请求相关的信息,例如输入、参数和头文件。
消息收集器
消息收集器包含你可以在应用程序中添加的消息。你可以添加消息而不是添加一堆打印语句:
from debugbar.facades import Debugbar
Debugbar.get_collector('messages').add_message("a debug message")
你还可以添加标签,这将在内容选项卡中创建一个彩色的标签:
Debugbar.get_collector('messages').add_message("a debug message", tags={"color": "green", "message": "tag name"})
环境收集器
此收集器将所有环境变量添加到你的调试栏以及 Python 和 Masonite 版本信息中。
测量收集器
你可以使用测量收集器来测量应用程序中的两个点。默认情况下,它是应用程序完成整个请求所需的时间。你可以启动和停止任何想要的措施:
from debugbar.facades import Debugbar
Debugbar.start_measure("loop check")
# .. Long running code
Debugbar.stop_measure("loop check")
现在你将在 measures 选项卡中看到运行此代码所需的时间。
添加你自己的收集器
如果你发现需要创建自己的收集器,可能是为了记录与异常相关的信息或类似信息,你可以简单地创建自己的收集器:
创建收集器
收集器就是像这样的简单实例:
class YourCollector:
def __init__(self, name="Your Collector", description="Description"):
self.messages = []
self.name = name
self.description = description
def restart(self):
self.messages = []
return self
需要使用 restart
方法在每个请求中重新启动收集器,以便使信息不会在每个请求之间保留。如果你的收集器不需要此功能,则可以简单地返回 self
。
收集器方法
接下来,你需要一种方法来向你的收集器添加数据。这可以在你希望开发人员使用的任何方法中完成。这些是你的外部API,以及你希望开发人员与你的收集器交互的方式。你可以将这些方法命名为你想要的任何内容,并且可以像你需要的那样复杂。
class YourCollector:
def __init__(self, name="Your Collector", description="Description"):
self.messages = []
self.name = name
self.description = description
def restart(self):
self.messages = []
return self
def add(self, key, value):
self.messages.append({key: value})
此方法可以像你需要的那样简单或复杂。Masonite Debugbar 的一些收集器使用特殊类来保存所有信息。
收集器渲染
接下来,你需要一个 collect
方法和一个 html
方法来完成收集器。首先,collect
方法应该只返回一个像这样的字典:
from jinja2 import Template
class YourCollector:
def __init__(self, name="Your Collector", description="Description"):
self.messages = []
self.name = name
self.description = description
def restart(self):
self.messages = []
return self
def add(self, key, value):
self.messages.append({key: value})
def collect(self):
collection = []
for message in self.messages:
for key, value in message.items():
collection.append(
{
"key": key,
"value": value
}
)
# # render data to html
template = Template(self.html())
return {
"description": self.description,
"count": len(collection),
"data": collection,
"html": template.render({"data": collection}),
}
def html(self):
return """
<div>
<div class="flex justify-between p-4">
<p>{{ object.key }}: {{ object.value }}</p>
</div>
</div>
"""
在 html
方法循环中的 data
是我们构建的集合。你可以使用它来为选项卡和内容设置样式。
在 collect
方法返回的字典中,description
用于在选项卡内容顶部显示一个快速描述。这里的 count
是实际选项卡中显示的数字徽章。
注册收集器
最后,我们只需要将收集器注册到调试栏中即可。你可以在自己的提供者中执行此操作。如果你正在构建自己的应用程序,则可以制作自己的提供者。如果你正在作为包的一部分构建收集器,则可以让开发人员将其安装在其项目中。
class YourProvider(Provider):
def __init__(self, application):
self.application = application
def register(self):
debugger = self.application.make('debugger')
debugger.add_collector(YourCollector())
def boot(self):
pass
最后,在你的提供程序配置中注册提供者,你的收集器现在将在调试工具栏中与其他收集器一起显示。
本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。