Django日志和调试工具栏实现高效的应用程序调试和性能优化
作者:互联小助手 发布时间:2022-10-25 10:58:01
配置日志
在Django中,可以通过logging模块来记录日志。日志记录器是将日志消息传递给日志处理器的对象。当需要记录日志时,可以使用以下代码来创建一个日志记录器:
import logging
logger = logging.getLogger(__name__)
在创建日志记录器后,可以再创建一个或多个日志处理器来处理日志消息。日志处理器有多个种类,下面是一些常用的日志处理器:
logging.StreamHandler()
- 将日志消息发送到标准输出流logging.FileHandler(filename, mode='a', encoding=None, delay=False)
- 将日志消息写入文件logging.handlers.RotatingFileHandler(filename, mode='a', maxBytes=0, backupCount=0, encoding=None, delay=False)
- 将日志消息写入文件,如果文件的大小超出maxBytes
指定的值,那么将重新生成一个文件来记录日志logging.handlers.TimedRotatingFileHandler(filename, when='h', interval=1, backupCount=0, encoding=None, delay=False)
- 将日志消息写入文件,根据指定的时间间隔和when
参数生成新文件logging.handlers.RotatingFileHandler(filename, mode='a', maxBytes=0, backupCount=0, encoding=None, delay=False)
- 将日志消息写入文件,如果文件的大小超出maxBytes
指定的值,那么将重新生成一个文件来记录日志logging.handlers.SocketHandler(host, port)
- 使用TCP协议,将日志信息发送到指定主机和端口的网络主机上logging.handlers.SMTPHandler(mailhost, fromaddr, toaddrs, subject, credentials=None, secure=None, timeout=1.0)
- 将日志输出到指定的邮件地址logging.MemoryHandler(capacity, flushLevel=ERROR, target=None, flushOnClose=True)
- 将日志输出到内存指定的缓冲区中
上面每个日志处理器都指定了一个名为level
的属性,它代表了日志的级别,不同的日志级别反映出日志中记录信息的严重性。Python中定义了六个级别的日志,按照从低到高的顺序依次是:NOTSET、DEBUG、INFO、WARNING、ERROR、CRITICAL。
日志记录器中配置的日志级别有可能不是最终的日志级别,因为还要参考日志处理器中配置的日志级别,取二者中级别较高者作为最终的日志级别。
Django框架提供了如下所示的内置记录器:
django
- 在Django层次结构中的所有消息记录器django.request
- 与请求处理相关的日志消息。5xx响应被视为错误消息;4xx响应被视为为警告消息django.server
- 与通过runserver调用的服务器所接收的请求相关的日志消息。5xx响应被视为错误消息;4xx响应被记录为警告消息;其他一切都被记录为INFOdjango.template
- 与模板渲染相关的日志消息django.db.backends
- 有与数据库交互产生的日志消息,如果希望显示ORM框架执行的SQL语句,就可以使用该日志记录器。
配置Django-Debug-Toolbar
如果想调试你的Django项目,你一定不能不过名为Django-Debug-Toolbar的神器,它是项目开发阶段辅助调试和优化的必备工具,只要配置了它,就可以很方便的查看到项目运行信息,这些信息对调试项目和优化Web应用性能都是至关重要的。
使用Django-Debug-Toolbar只需要进行以下步骤:
安装Django-Debug-Toolbar。
pip install django-debug-toolbar
修改settings.py
文件:
INSTALLED_APPS = [
'debug_toolbar',
]
MIDDLEWARE = [
'debug_toolbar.middleware.DebugToolbarMiddleware',
]
DEBUG_TOOLBAR_CONFIG = {
# 引入jQuery库
'JQUERY_URL': '<https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js>',
# 工具栏是否折叠
'SHOW_COLLAPSED': True,
# 是否显示工具栏
'SHOW_TOOLBAR_CALLBACK': lambda x: True,
}
修改urls.py
文件:
if settings.DEBUG:
import debug_toolbar
urlpatterns.insert(0, path('__debug__/', include(debug_toolbar.urls)))
在配置好Django-Debug-Toolbar之后,页面右侧会看到一个调试工具栏,上面包括了各种调试信息,例如请求和响应信息、SQL查询、缓存、模板、日志等等。可以通过这些信息来更好地了解Web应用程序的运行情况和性能瓶颈。
优化ORM代码
Django的ORM(Object-Relational Mapping)框架是其最重要的特性之一,它可以将Python对象映射到数据库中的表和列,使得开发者可以使用面向对象的方式来操作数据库。但是,ORM框架也有一些性能上的问题,如果不加以优化,可能会导致Web应用程序的性能瓶颈。
以下是一些优化ORM代码的技巧:
使用select_related
和prefetch_related
select_related
和prefetch_related
是Django ORM框架中用来优化查询性能的两个方法。select_related
可以在查询时一次性获取与主表关联的外键表的数据,而prefetch_related
则可以在查询时一次性获取与主表关联的多对多关系表的数据。这样可以减少查询次数,提高查询性能。
使用annotate
和aggregate
annotate
和aggregate
是Django中用来计算聚合数据的方法。annotate
是用来给查询结果添加新的字段的方法,而aggregate
则是用来对查询结果进行聚合计算的方法。这些方法可以在查询时一次性计算出需要的聚合数据,而不需要在后续的处理中再进行计算。
使用values
和values_list
values
和values_list
是Django ORM框架中用来获取指定字段数据的方法。values
可以返回一个QuerySet对象,其中包含了指定字段的键值对,而values_list
则可以返回一个QuerySet对象,其中包含了指定字段的元组。这些方法可以减少查询结果集的大小,提高查询性能。
使用bulk_create
和bulk_update
bulk_create
和bulk_update
是Django ORM框架中用来批量创建和更新数据的方法。这些方法可以减少数据库操作的次数,提高数据库操作的性能。
使用cache
Django中提供了一个缓存框架,可以将查询结果缓存起来,以减少数据库的访问次数。可以使用cache
装饰器或者cache_page
装饰器来缓存查询结果。
使用raw
查询
Django中的ORM框架虽然方便易用,但是在一些复杂的查询场景中可能性能并不理想。在这种情况下,可以使用raw
查询来直接执行SQL语句,以获得更好的性能。
以上是一些优化ORM代码的技巧,这些技巧可以帮助开发者提高Web应用程序的性能,减少性能瓶颈。在实际开发中,需要根据具体的场景和需求选择合适的优化方法。
来源:https://blog.csdn.net/inchat/article/details/130022902
猜你喜欢
- 2。date_default_timezone_set("PRC"); 3。PHP&
- 新年新气象,今天就用代码来制作一个 动态鞭炮 ,效果如下所示。动态鞭炮的基本原理是:将一个录制好的鞭炮视频以字符画的形式复现,基本步骤是帧采
- 品牌是我们一直挂在嘴边的词语,视觉设计师们经常说到,公司的品牌该如何如何去设计?这个违背了我们的公司品牌!等等。之前我有谈过关于 品牌灵魂的
- 官方文档https://developers.weixin.qq.com/miniprogram/dev/framework/open-ab
- CSV文件简单来说CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗
- 一、首先从SQLServer中Error讲起,SQL中错误处理有些怪辟 错误级别同是16但结果都不同。select *
- 废话不多说了,直接给大家贴代码了,代码写的不好还去各位大侠见谅。#-*-coding:utf-8-*- #1、字典dict = {'
- 本文实例讲述了python调用机器喇叭发出蜂鸣声(Beep)的方法。分享给大家供大家参考。具体分析如下:下面这段python代码可调用机器喇
- 最近接了个项目,其中有需求是要实现摇一摇红包功能,在网上搜了好久,都没有找到源码,没办法,只有自动写了,下面小编把我的劳动成果分享给大家供大
- 代码#!/usr/bin/env python# -*- coding: utf-8 -*-# @File : HtmlParser.py#
- 目录一.权限简介二.权限表结构设计:第一版三.权限表结构设计:第二版四.客户管理之动态“一级”菜单五.客户管理之动态“二级”菜单六.客户管理
- 正文开始:服务器端代码:# 再来简单的测试,这个是服务器端import socketimport sysBUF_SIZE = 1024ip_
- 在keras中,数据是以张量的形式表示的,不考虑动态特性,仅考虑shape的时候,可以把张量用类似矩阵的方式来理解。例如[[1],[2],[
- SQL Server Extended Events(下面简称XEvent)是SQL Server 2008里新加的事件处理系统,用来取代S
- 把中文字符转换回Unicode字符。见下列代码:<%function unicode(str)dim i,j,c,
- 这篇文章主要介绍了wxpython自定义下拉列表框过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要
- 写爬虫是一个发送请求,提取数据,清洗数据,存储数据的过程。在这个过程中,不同的数据源返回的数据格式各不相同,有 JSON 格式,有 XML
- 近日大家热议的盗版XP黑屏问题想必很多人都知道了,在这里就不多说。据媒体报道,微软公司将实施逐步投放策略,预计本周将投放5%黑屏,下周投放2
- 前言有时候在使用Python处理比较耗时操作的时候,为了便于观察处理进度,这时候就需要通过进度条将处理情况进行可视化展示,以便我们能够及时了
- 问题你有50枚金币,需要分配给以下几个人:Matthew,Sarah,Augustus,Heidi,Emilie,Peter,Giana,A