Flask 日志

flask 日志  代码源码源自编程浪子flask点餐小程序代码

记录用户访问日志错误日志

这段代码是一个基于Flask框架的日志服务类,用于  记录用户访问日志错误日志。代码中定义了一个名为LogService的类,其中包含了两个静态方法:addAccessLog 和 addErrorLog

addAccessLog方法用于记录用户的访问日志。在该方法中:

首先创建一个AppAccessLog实例化对象target,并将请求的URL、引用URL、IP地址、查询参数等信息赋值给相应的属性。如果当前用户已登录,则将用户ID也赋值给uid属性。然后获取请求的User-Agent,并赋值给ua属性。最后,将target对象添加到数据库会话中,并提交事务。


addErrorLog方法用于记录错误日志。在该方法中:

首先判断请求的URL是否为favicon.ico,如果是则直接返回。然后创建一个AppErrorLog对象target,并将请求的URL、引用URL、查询参数、错误内容等信息赋值给相应的属性。最后,将target对象添加到数据库会话中,并提交事务。

这段代码的作用是在用户访问网站时记录访问日志错误日志,以便后续进行分析和排查问题

common/libs/LogService.py

# -*- coding: utf-8 -*-
from flask import request,g
from application import app,db
import json
from common.libs.Helper import getCurrentDate
from common.models.log.AppAccessLog import AppAccessLog
from common.models.log.AppErrorLog import AppErrorLogclass LogService():@staticmethoddef addAccessLog():target = AppAccessLog()#target_url  访问的urltarget.target_url = request.url#referer_url 当前访问的refertarget.referer_url = request.referrer# remote  adj,(计算机)远程的、遥控的target.ip = request.remote_addrtarget.query_params = json.dumps(  request.values.to_dict() )if 'current_user' in g and g.current_user is not None:target.uid = g.current_user.uid#  Unified Architecture   ua 统一架构    target.ua = request.headers.get( "User-Agent" )target.created_time = getCurrentDate()db.session.add( target )db.session.commit( )return True@staticmethoddef addErrorLog( content ):if 'favicon.ico' in request.url:returntarget = AppErrorLog()target.target_url = request.urltarget.referer_url = request.referrertarget.query_params = json.dumps(request.values.to_dict())target.content = contenttarget.created_time = getCurrentDate()db.session.add(target)db.session.commit()return True

问题0:该flask代码中,request值是如何包含这么多值的? 如何给request设置这么多值?

Flask中的request对象是一个全局对象,它包含了HTTP请求的所有信息,包括URL、请求方法、请求头、请求参数等等。这些值是由Flask框架自动解析和设置的,无需手动设置。

在Flask中,request对象的属性和方法可以用来获取和操作请求的各个部分。下面是一些常用的request属性和方法:

  • request.url:获取当前请求的URL。
  • request.method:获取当前请求的方法,如GET、POST等。
  • request.headers:获取当前请求的头部信息。
  • request.values:获取当前请求的参数,包括GET和POST请求的参数。
  • request.args:获取当前请求的GET参数。
  • request.form:获取当前请求的POST参数。
  • request.cookies:获取当前请求的Cookie。
  • request.files:获取当前请求上传的文件。

在上述代码中,request对象的属性和方法被用来获取和设置日志记录的相关信息,如请求的URL、Referer、参数等。这些信息可以用于记录访问日志和错误日志,以便后续的分析和排查问题。

问题1:  json.dumps()函数地作用是什么?

json.dumps()是一个Python库中的函数,用于将Python数据结构转换为JSON格式的字符串。它接受一个Python对象作为参数,并返回一个JSON格式的字符串表示该对象。

以下是一个使用json.dumps()的示例:

import jsondata = {'name': 'myname','age': 100
}json_str = json.dumps(data)
print(json_str)  # 输出:{"name": "myname", "age": 100}

在上面的示例中,我们将一个包含’name’和’age’键值对的字典对象转换为JSON字符串。

问题2: to_dict()方法的作用是什么?

to_dict()是一个方法,用于将request.values对象转换为字典形式。在json.dumps()函数中,request.values.to_dict()将返回一个字典对象,然后json.dumps()将该字典对象序列化为一个JSON字符串。

范例:

import json# 假设request.values是一个包含键值对的对象
data = request.values.to_dict()# 将data转换为JSON字符串
json_data = json.dumps(data)print(json_data)

这段代码将request.values对象转换为字典形式,并使用json.dumps()将其序列化为一个JSON字符串。最后,打印出该JSON字符串。

展示错误及错误引导:

web/interceptors/ErrorInterceptor.py

# -*- coding: utf-8 -*-
from application import  app
from common.libs.Helper import ops_render
from common.libs.LogService import LogService@app.errorhandler( 404 )
def error_404( e ):LogService.addErrorLog( str( e ) )return ops_render( 'error/error.html',{ 'status':404,'msg':'很抱歉!您访问的页面不存在' } )

LogService.addErrorLog(str(e))  以字符串的形式将这个错误传递到LogService里去

@app.errorhandler(404)是Flask框架中的一个装饰器,用于定义当发生404错误时的处理函数。具体来说,当用户访问一个不存在的路由时,Flask会自动调用被@app.errorhandler(404)修饰的函数来处理该错误,并返回一个自定义的错误页面或错误信息给前端。

d

www.py

'''
统一拦截处理和统一错误处理
'''
from web.interceptors.AuthInterceptor import  *
from web.interceptors.ErrorInterceptor import  *

web/templates/error/error.html

{% extends "common/layout_user.html" %}
{% block content %}<div class="row"><div class="panel panel-default gray-bg text-center" style="min-height: 600px;line-height: 600px;"><div class="panel-body gray-bg" style="font-size: 18px;"><p>{{ msg }},<a href="{{ buildUrl('/') }}">返回首页</a></p></div></div></div>
{% endblock %}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/581465.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

XUbuntu22.04之删除多余虚拟网卡和虚拟网桥(二百零四)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

用Xshell连接虚拟机的Ubuntu20.04系统记录。虚拟机Ubuntu无法上网。本机能ping通虚拟机,反之不能。互ping不通

先别急着操作&#xff0c;看完再试。 如果是&#xff1a;本机能ping通虚拟机&#xff0c;反之不能。慢慢看到第8条。 如果是&#xff1a;虚拟机不能上网&#xff08;互ping不通&#xff09;&#xff0c;往下一直看。 系统是刚装的&#xff0c;安装步骤&#xff1a;VMware虚拟机…

【Linux】 last 命令使用

last 命令 用于检索和展示系统中用户的登录信息。它从/var/log/wtmp文件中读取记录&#xff0c;并将登录信息按时间顺序列出。 著者 Miquel van Smoorenburg 语法 last [-R] [-num] [ -n num ] [-adiox] [ -f file ] [name...] [tty...]last 命令 -Linux手册页 选项及作用…

vue项目表单使用正则过滤ip、手机号

import useFormValidate from /hooks/useFormValidatesetup(props, { emit }) {const { validateName, validateIPAndPort } useFormValidate()const state reactive({workFaceInfo: props.info?.id ? props.info : {},sysTypeData: props.sysType,formRules: {name: [{req…

SpringBoot 在IDEA中实现热部署 (JRebel实用版)

JRebel简介&#xff1a; JRebel是与应用程序服务器集成的JVM Java代理&#xff0c;可使用现有的类加载器重新加载类。只有更改的类会重新编译并立即重新加载到正在运行的应用程序中&#xff0c;JRebel特别不依赖任何IDE或开发工具&#xff08;除编译器外&#xff09;。但是&am…

『Linux升级路』冯诺依曼体系结构与操作系统

&#x1f525;博客主页&#xff1a;小王又困了 &#x1f4da;系列专栏&#xff1a;Linux &#x1f31f;人之为学&#xff0c;不日近则日退 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、冯诺依曼体系结构 &#x1f4d2;1.1为什么要有体系结构 &#x1f4d2;1.2…

虚函数的讲解

文章目录 虚函数的声明与定义代码演示基类Person派生类Man派生类Woman 测试代码动态绑定静态绑定访问私有虚函数总结一下通过成员函数指针调用函数的方式 虚函数的声明与定义 虚函数存在于C的类、结构体等中&#xff0c;不能存在于全局函数中&#xff0c;只能作为成员函数存在…

C# MVC +Layui侧边导航栏的收缩及展开

目录 1、头部代码 2、侧边栏&#xff08;例子只写了一级导航&#xff0c;需要多级可自行添加&#xff09; 3、body内容填充 4、 JS 1、头部代码 <div class"layui-layout layui-layout-admin"> <div class"layui-header"> …

MAVLINK生成自定义消息

git clone https://github.com/mavlink/mavlink.gitcd mavlinkgit submodule update --init --recursivepython -m mavgenerate出现以下界面 XML填写自定义xml路径&#xff0c;内容可以参考mavlink/message_definitions/v1.0 Out为输出路径 <?xml version"1.0"…

如何用Python批量计算Word中的算式

一、问题的提出 到了期末&#xff0c;大家都在忙着写总结、改试卷、算工作量&#xff0c;写总结可以借助于ChatGPT&#xff0c;改试卷可以用星火的自动批阅功能&#xff0c;算工作量就是一项比较棘手的问题&#xff0c;因为它涉及很多算式&#xff0c;有时需要老师用计算器算来…

Linux操作系统极速入门[常用指令](安装jdk,MySQL,nginx),以及在linux对项目进行部署。

linux概述&#xff1a; Linux是一套免费使用和自由传播的操作系统 我们为什么要学&#xff0c;Linux&#xff1f; 主流操作系统&#xff1a; linux系统版本&#xff1a; 内核版&#xff1a; 由linux核心团队开发&#xff0c;维护 免费&#xff0c;开源 负责控制硬件 发行版&…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之线性布局容器Row组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之线性布局容器Row组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Row组件 沿水平方向布局容器。 子组件 可以包含子组件。 接口 Row(…

机器学习深度学习面试笔记

机器学习&深度学习面试笔记 机器学习Q. 在线性回归中&#xff0c;如果自变量之间存在多重共线性&#xff0c;会导致什么问题&#xff1f;如何检测和处理多重共线性&#xff1f;Q. 什么是岭回归(Ridge Regression)和Lasso回归(Lasso Regression)&#xff1f;它们与普通线性回…

从0开始学前端day1

script setup 在script里写一个setup的作用 自动注册子组件属性和方法无需返回&#xff0c;执行完后自动更新支持props和context Vue 3中的props和context props是一种用于父子组件通信的机制。父组件可以通过props向子组件传递数据&#xff0c;子组件则可以通过props接收来…

Cucumber-JVM的示例和运行解析

Cucumber-JVM 是一个支持 Behavior-Driven Development (BDD) 的 Java 框架。在 BDD 中&#xff0c;可以编写可读的描述来表达软件功能的行为&#xff0c;而这些描述也可以作为自动化测试。 Cucumber-JVM 的最小化环境 Cucumber-JVM是BDD的框架&#xff0c; 提供了GWT语法的相…

云原生机器学习平台cube-studio开源项目及代码简要介绍

1. cube-studio介绍 云原生机器学习平台cube-studio介绍&#xff1a;https://juejin.cn/column/7084516480871563272 cube-studio是开源的云原生机器学习平台&#xff0c;目前包含特征平台&#xff0c;支持在/离线特征&#xff1b;数据源管理&#xff0c;支持结构数据和媒体标…

判断电话号码是否重复-excel

有时候重复的数据不需要或者很烦人&#xff0c;就需要采取措施&#xff0c;希望以下的方法能帮到你。 1.判断是否重复 方法一&#xff1a; 1&#xff09;针对第一个单元格输入等号&#xff0c;以及公式countif(查找记录数的范围&#xff0c;需要查找的单元格&#xff09; 2…

Python Web --Django Web框架

场景 近日写了不少Python脚本&#xff0c;例如&#xff1a;爬虫、ocr、模型训练等。我认为可以更加了解python&#xff0c;因为近一个月使用Python给我的感觉比较好&#xff0c;代码比较简单&#xff0c;比java简单很多&#xff0c;而且python自己管理内存&#xff0c;更多依赖…

Modbus RTU转Modbus TCP模块,RS232/485转以太网模块,YL102 多功能串口服务器模块

特点&#xff1a; ● Modbus RTU协议自动转换成Mobus TCP协议 ● 100M高速网卡&#xff0c;10/100M 自适应以太网接口 ● 支持 AUTO MDI/MDIX&#xff0c;可使用交叉网线或平行网线连接 ● RS232波特率从300到256000可设置 ● 工作方式可选择TCP Server, TCP Client, U…

四川天蝶电子商务有限公司助力商家赢在起跑线

随着电商行业的迅猛发展&#xff0c;越来越多的人选择在抖店上开设自己的店铺。作为一家专业的电子商务公司&#xff0c;四川天蝶电子商务有限公司为商家提供了一站式的抖店开店服务&#xff0c;帮助商家轻松开启电商之旅。 首先&#xff0c;四川天蝶电子商务有限公司拥有丰富的…