最新要闻
- 最新消息:不怕被坑了!工信部出手:自动续费前5日应以显著方式提醒
- 1999元 极米Play 2投影仪上架:120寸大屏、Type-C供电
- 【世界时快讯】3D大颗粒 杰士邦特惠装30支:19.9元秒杀
- 异形方向盘有隐患吗?汽车博主:既不方便也不安全
- 全球微头条丨照坏了手机的激光雷达:会照瞎你的眼吗?
- 全球第一大癌!39岁女儿与67岁父亲先后确诊乳腺癌
- 世界微速讯:电动自行车电池容量正常但里程不足?5招教你解决
- 环球讯息:延迟骤降50%:魅族20系列首发游戏模式6.0
- 热文:秒独显的3GHz高频缩水 AMD锐龙7000HS上市前又挨一刀
- 房贷60万20年和30年利息差多少?两种还款方式利息对比
- 【环球热闻】3月1日广东男篮主场见 威姆斯晒登机照:回家
- 焦点资讯:美国高中地下发现加密货币矿场 7个月耗电费12万元
- 直屏手机为何越来越多了?原因有三个
- 新资讯:近250家公司用ChatGPT取代员工:过半考核优秀 能省10万美元
- 环球滚动:诺基亚60年首次更换Logo后:手机品牌继续沿用经典蓝底Logo
- 环球快报:比老司机还稳!特斯拉主动安全压线避让变道前车:车主惊叹
广告
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
路飞项目封装logger、response以及全局异常
- 一、封装日志logger
- 1.封装日志的步骤
- 2.测试是否封装成功
- 3.展示测试结果
- 二、封装全局异常处理
- 1.封装全局异常的步骤
- 2.写代码测试一下
- 3.展示测试结果
- 三、封装Response
- 1.封装步骤
- 2.写代码测试
- 3.展示测试结果
一、封装日志logger
以后项目肯定要记录日志,日志都可以打印到控制台、日志可以写到日志文件中、日志存到某个库中、所有项目日志统一管理、sentry可以做统一管理日志(Django写的开源项目)。以后,在项目中不要出现print了,以后都用日志logger》Info(),等到项目上线,只要调整日志级别,低级别的日志就不用打印了,于是日志输出不用删掉
1.封装日志的步骤
第一步:在dev.py文件中日志配置(大字典)
点击查看代码
# 真实项目上线后,日志文件打印级别不能过低,因为一次日志记录就是一次文件io操作LOGGING = { "version": 1, "disable_existing_loggers": False, "formatters": { "verbose": { "format": "%(levelname)s %(asctime)s %(module)s %(lineno)d %(message)s" }, "simple": { "format": "%(levelname)s %(module)s %(lineno)d %(message)s" }, }, "filters": { "require_debug_true": { "()": "django.utils.log.RequireDebugTrue", }, }, "handlers": { "console": { # 实际开发建议使用WARNING "level": "DEBUG", "filters": ["require_debug_true"], "class": "logging.StreamHandler", "formatter": "simple" }, "file": { # 实际开发建议使用ERROR "level": "INFO", "class": "logging.handlers.RotatingFileHandler", # 日志位置,日志文件名,日志保存目录必须手动创建,注:这里的文件路径要注意BASE_DIR代表的是小luffyapi "filename": os.path.join(os.path.dirname(BASE_DIR), "logs", "luffy.log"), # 日志文件的最大值,这里我们设置300M "maxBytes": 300 * 1024 * 1024, # 日志文件的数量,设置最大日志数量为10 "backupCount": 10, # 日志格式:详细格式 "formatter": "verbose", # 文件内容编码 "encoding": "utf-8" }, }, # 日志对象 "loggers": { "django": { "handlers": ["console", "file"], "propagate": True, # 是否让日志信息继续冒泡给其他的日志处理系统 }, }}
第二步:在utils目录下新建common_logger.py文件得到日志对象
(资料图片仅供参考)
import logginglogger = logging.getLogger("django")
第三步:以后使用,在任何文件中导入使用即可
from utils.commom_looger import loggerlogger.info("info级别的日志")logger.error("error级别的日志")
2.测试是否封装成功
写代码测试一下
点击查看代码
# 视图函数from django.http import JsonResponsefrom luffy_api.utils.common_logger import loggerdef test_logger(request): logger.info("info级别的日志") logger.error("error级别的日志") return JsonResponse({"name": "mire"})# 路由from django.urls import pathfrom user import viewsurlpatterns = [ path("test_logger/", views.test_logger),]
3.展示测试结果
后台控制台打印的信息前端渲染的信息如下
二、封装全局异常处理
前端要接收的格式需要统一,无论后端是否出错,三大认证,视图类的方法中只要出了异常,就会执行一个函数,但是这个函数只能处理drf的异常---》我们需要自己写个函数,既能处理drf异常,又能处理django异常,这样统一返回格式,前端看到格式都统一了
1.封装全局异常的步骤
第一步:在utils目录下新建common_exceptions.py文件并写函数
# 首先异常处理依赖drf,因此需要drfpip install djangorestframework# 再在common_exceptions.py文件里写函数from rest_framework.views import exception_handler as drf_exception_handlerfrom rest_framework.response import Responsefrom utils.common_logger import loggerdef exception_handler(exc, context): """ 记录日志 :那个IP地址 用户id是多少、访问那个路径执行了那个视图函数、 出来什么错 """ request = context.get("request") view = context.get("view") ip = request.META.get("REMOTE_ADDR") user_id = request.user.pk path = request.get_full_path() response = drf_exception_handler(exc, context) if response: logger.warning("drf出来异常,异常是:%s" % str(exc)) res = Response({"code": 999, "msg": response.data.get("detail", "服务器异常, 请联系管理员")}) else: logger.error("用户【%s】,ip地址为【%s】,访问地址【%s】,执行的视图函数为【%s】是,出现的错是【%s】" % (user_id, ip, path, str(view), str(exc))) res = Response({"code": 888, "msg": "服务器异常,请联系管理员"}) return res
第二步:在配置文件里写下一下配置
REST_FRAMEWORK = { "EXCEPTION_HANDLER": "utils.common_exceptions.exception_handler", }# 还得注册一下INSTALLED_APPS = [ "rest_framework",]
2.写代码测试一下
点击查看代码
# 视图函数# 测试全局异常配置from rest_framework.views import APIViewfrom rest_framework.response import Responseclass TestException(APIView): def get(self, request): l = [1, 23, 4] print(l[9]) return Response("ok")# 路由from django.contrib import adminfrom django.urls import pathfrom user import viewsurlpatterns = [ path("admin/", admin.site.urls), path("test_exception/", views.TestException.as_view()),]
3.展示测试结果
三、封装Response
本身drf有Response,但是咱们公司规定,前端收到的格式都是固定的,对Response进行封装,封装后,code,msg可以不传,不传就用默认的
{code:100,msg:提示,data:{}/[]}{code:100,msg:提示,token:asdfasd,user:lqz}
1.封装步骤
第一步:在utils下新建common_response.py、且封装APIResponse
第二步:导入使用,视图函数的方法,返回时,都使用咱们自己的
2.写代码测试
点击查看代码
# 视图函数# 测试封装Responsefrom utils.common_response import APIResponseclass TestAPIResponse(APIView): def get(self, request): return APIResponse({"code":100, "msg":"成功"})from django.contrib import adminfrom django.urls import pathfrom user import viewsurlpatterns = [ path("admin/", admin.site.urls), path("test_response/", views.TestAPIResponse.as_view()),]
3.展示测试结果
路飞项目封装logger、response以及全局异常
最新消息:不怕被坑了!工信部出手:自动续费前5日应以显著方式提醒
1999元 极米Play 2投影仪上架:120寸大屏、Type-C供电
【世界时快讯】3D大颗粒 杰士邦特惠装30支:19.9元秒杀
异形方向盘有隐患吗?汽车博主:既不方便也不安全
从银行数字化转型来聊一聊,火山引擎 VeDI 旗下 ByteHouse 的应用场景
今日热讯:第123篇: JS函数属性与方法
Prometheus配置Alertmanager(钉钉告警)
全球微头条丨照坏了手机的激光雷达:会照瞎你的眼吗?
全球第一大癌!39岁女儿与67岁父亲先后确诊乳腺癌
世界微速讯:电动自行车电池容量正常但里程不足?5招教你解决
环球讯息:延迟骤降50%:魅族20系列首发游戏模式6.0
热文:秒独显的3GHz高频缩水 AMD锐龙7000HS上市前又挨一刀
房贷60万20年和30年利息差多少?两种还款方式利息对比
当前视点!WHAT IS PPM Encoder ?
焦点速递!记录--关于无感刷新Token,我是这样子做的
热点!如何使用appuploader制作apple证书
世界热资讯!JMeter的基础认识
【环球热闻】3月1日广东男篮主场见 威姆斯晒登机照:回家
【天天报资讯】Redis 缓存过期策略和内存淘汰策略
环球热头条丨【复盘】搭建日志平台的复盘与思考
天天微动态丨sed命令的使用(替换)
环球实时:软件工程阅读笔记
Android ADB 备忘清单_开发速查表分享
焦点资讯:美国高中地下发现加密货币矿场 7个月耗电费12万元
直屏手机为何越来越多了?原因有三个
新资讯:近250家公司用ChatGPT取代员工:过半考核优秀 能省10万美元
环球滚动:诺基亚60年首次更换Logo后:手机品牌继续沿用经典蓝底Logo
环球快报:比老司机还稳!特斯拉主动安全压线避让变道前车:车主惊叹
天天头条:三睾拟双身虫
Prometheus插件安装(mysql_exporter)
消息!河南农信社数字化转型实践方案
今日讯!剑指 Offer 55 - I. 二叉树的深度(java解题)
世界新动态:八代将军吉宗下载_八代将军吉宗
女子驾奇瑞小蚂蚁 高速上油门到底车速为0!4S店:退款退车
世界速看:暴雪联合时尚品牌推出《暗黑4》主题女装:这画风太诡异了
焦点播报:董明珠:格力员工一人一套房承诺不变
个人私生活被恶搞辣眼?董明珠:有些自媒体为了赚钱不择手段 低级下流无聊
一文看懂小米无线AR眼镜探索版:自研微手势 隔空就能刷抖音
数据结构刷题2023.02.27小记
天天即时看!Ubuntu-深度学习环境搭建(yolov3)
焦点滚动:学习swoole之前,你需要知道的几件事
世界看热讯:流氓APP再见!26条新规严管移动应用:不得欺骗误导用户
Win11 22H2“Moment 2”更新快了:将在未来几周推送
每日讯息!男子醉驾被查也不让新手妻子开车:为了不要出现更大的事故
【全球新要闻】为迎接中国游客!韩国旅游业也是拼了:推中文菜单、背汉语、招募中文职员
手一抖被迫看广告!工信部通知:禁止高灵敏度“摇一摇”
当前资讯!宜兴购房补贴本科生可以申请吗?
焦点关注:ChatGPT的隐私安全问题及隐私保护技术
无关风月是什么意思?无关风月我题序等你回是什么歌?
小盆友是什么意思?小盆友生日祝福成语有哪些?
这款MOD可以让《原子之心》双子舞伶露脸:好看吗?
天天播报:中兴发布小方糖路由器:双千兆设计 首发99元
考验信仰、财力的时候到了!丰田加价神车新一代埃尔法曝光
13代酷睿CPU热卖 Intel承诺员工薪酬会涨回来:基本工资100%满血
每日消息!形似比亚迪仰望U8 奇瑞捷途旅行者官图发布:保时捷前总监操刀
电视剧红狐荣乡君是什么人?红狐电视剧演员表介绍
刻在我心底的名字是哪部电影的主题曲?刻在我心底的名字歌词是什么?
win7快速启动栏在哪里?win7快速启动栏怎么使用?
东芝ac100怎样刷系统?东芝ac100安卓笔记本多少钱?
超长待机智能手机有哪些?超长待机智能手机排行榜
三星GALAXY i5700什么时候上市的?三星GALAXY i5700怎么关机?
世界热头条丨谷歌邮箱注册
环球观察:Prometheus插件安装(NodeExporter)
焦点热讯:Redis高频面试题总结
速读:财政部:截至1月末,全国地方政府债务余额357018亿元
聚焦:威马员工在线讨薪 吉利副总裁:我这里缺人、可以考虑下
全球看点:一箱油续航轻松破千公里 五菱凯捷混动铂金版上市:12.98万起
摩托罗拉rizr纵向卷轴屏手机亮相:屏幕可伸长
国内能买到!ZERO SR-X概念电动摩托发布:110马力、能跑300公里
当前关注:送冰极洁面霜:妮维雅男士控油补水洗面奶24.9元大促
天天热推荐:Mysql 自定义目录安装
世界资讯:武汉Java培训班哪家好?大家都要怎么挑选
全球速看:SQL行转列、列转行(SQL Server版)
世界视点!南京Java培训班哪家好,什么样的可选
什么是潮吹
担心的事儿发生了:已有企业在用ChatGPT取代员工
每日热门:iPhone 15 Pro Max与14 Pro Max对比:明显更厚了!妥妥半斤机
纳智捷当街加油 车主现身说法:从郑州到广州加了5次
环球速递!半价大促:五芳斋豆沙青团6枚9.9元发车 清甜绵软
全球最早上映!任天堂《超级马力欧兄弟》大电影内地定档4月5日
世界最新:总结SpringBoot1.x迁移到2.x需要注意的问题
全球短讯!Spring Boot 实现日志链路追踪,无需引入组件,让日志定位更方便!
代理设计模式还不会?2分钟搞定
【世界报资讯】河南省通许县:“中国酸辣粉之都”正式揭牌
天天热门:微信下重拳:上万个群被封杀 此类行为千万别做
环球微头条丨程序员20年喝近2吨可乐屡患结石 几乎天天喝
联想推ThinkPad Z16 Gen 2笔记本:锐龙7000系列 可选4K+屏
双子姐妹、冰箱很带感 《原子之心》游戏已被破解:俄罗斯自己黑客干的
还敢生吃?日本即将核污水倒入大海 降低水产品氚活度分析精度
世界观天下!老外首次用上徕卡影像!小米13/Pro国际版发布:999欧元起
全球看热讯:9岁女演员获柏林电影节最佳主角:史上最年轻获奖者
今日热门!高三女生因百日誓师热血发言表情被网暴 父亲怒回应:我们的骄傲 请尊重
《流浪地球2》导演郭帆让学生们不要用ChatGPT写作业:老师分辨不出来
读Java性能权威指南(第2版)笔记03_ Java SE API技巧中
美国铁路烂到家:“毒列车公司”再次发生脱轨事故 问题没法解决
【世界速看料】昔日手机巨头换新!诺基亚换全新Logo 刷新认识:网友直呼爷青结
每日热议!残损货币及不宜流通货币常识_不宜流通人民币与残损币区别
AMD RX 7900显卡价格在中国崩盘了!两个月暴跌1400元
世界滚动:不完整的爱情