Flask 日志

news2025/1/20 5:50:35

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 AppErrorLog

class LogService():
    @staticmethod
    def addAccessLog():
        target = AppAccessLog()
        #target_url  访问的url
        target.target_url = request.url
        #referer_url 当前访问的refer
        target.referer_url = request.referrer
        # remote  adj,(计算机)远程的、遥控的
        target.ip = request.remote_addr
        target.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

    @staticmethod
    def addErrorLog( content ):
        if 'favicon.ico' in request.url:
            return
        target = AppErrorLog()
        target.target_url = request.url
        target.referer_url = request.referrer
        target.query_params = json.dumps(request.values.to_dict())
        target.content = content
        target.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 json

data = {
    '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.coloradmin.cn/o/1339825.html

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

相关文章

Spring Boot 中的虚拟线程

在本文中&#xff0c;我将讨论 Spring Boot 中的虚拟线程。 什么是虚拟线程&#xff1f; 虚拟线程作为 Java 中的一项功能引入&#xff0c;旨在简化并发性。 Virtual threads 是 轻量级的线程&#xff0c;由 Java Virtual Machine 而不是操作系统管理。它们被设计为易于使用且…

Linux下安装QQ

安装步骤&#xff1a; 1.进入官网&#xff1a;QQ Linux版-轻松做自己 2.选择版本&#xff1a;X86版下载dep 3安装qq 找到qq安装包位置&#xff0c;然后右击在终端打开输入安装命令&#xff0c;然后点击回车 sudo dpkg -i linuxqq_3.2.0-16736_amd64.deb 卸载qq 使用命令…

游泳耳机哪个牌子好,盘点2024最值得购买的游泳耳机

一款好的游泳耳机能让你在水中尽情畅游&#xff0c;同时享受到美妙的音乐。在选购游泳耳机时&#xff0c;防水性能、音质、舒适度和续航能力是至关重要的因素。接下来&#xff0c;我将为你介绍几款在这些方面都有出色表现的游泳耳机。 1. 南卡骨传导耳机 推荐理由&#xff1a…

软件测试/测试开发丨Pytest测试用例生命周期管理-Fixture

1、Fixture 用法 Fixture 特点及优势 1&#xff64;命令灵活&#xff1a;对于 setup,teardown,可以不起这两个名字2&#xff64;数据共享&#xff1a;在 conftest.py 配置⾥写⽅法可以实现数据共享&#xff0c;不需要 import 导⼊。可以跨⽂件共享3&#xff64;scope 的层次及…

图像处理-周期噪声

周期噪声 对于具有周期性的噪声被称为周期噪声&#xff0c;其中周期噪声在频率域会出现关于中心对称的性质&#xff0c;如下图所示 带阻滤波器 为了消除周期性噪声&#xff0c;由此设计了几种常见的滤波器&#xff0c;其中 W W W表示带阻滤波器的带宽 理想带阻滤波器 H ( u …

SNP Glue新Saas技术在云数据集成中如何提升客户价值

■ 新Glue版本可作为软件即服务(SaaS)应用程序使用 ■ SAP数据和非SAP数据源之间的云原生集成大大简化了客户的企业数据集成 ■ SNP Glue通过应对AI和大数据计划中的关键挑战来增强云数据集成的价值 德国&#xff0c;海德堡 —— 2023年11月29日&#xff0c;作为SAP环境中数…

Linux内核定时器-模块导出符号表

Linux内核定时器 定时器的当前时间如何获取&#xff1f; jiffies:内核时钟节拍数 jiffies是在板子上电这一刻开始计数&#xff0c;只要 板子不断电&#xff0c;这个值一直在增加&#xff08;64位&#xff09;。在 驱动代码中直接使用即可。 定时器加1代表走了多长时间&#xff…

javaEE -19(9000 字 JavaScript入门 - 4)

一&#xff1a; jQuery jQuery是一个快速、小巧且功能丰富的JavaScript库。它旨在简化HTML文档遍历、事件处理、动画效果以及与后端服务器的交互等操作。通过使用jQuery&#xff0c;开发者可以以更简洁、更高效的方式来编写JavaScript代码。 jQuery提供了许多易于使用的方法和…

腾讯云轻量应用服务器优缺点介绍

腾讯云轻量应用服务器开箱即用、运维简单的轻量级云服务器&#xff0c;CPU内存带宽配置高并且价格特别优惠&#xff0c;轻量2核2G3M带宽62元一年、2核2G4M优惠价118元一年&#xff0c;540元三年、2核4G5M带宽218元一年&#xff0c;756元3年、4核8G12M带宽646元15个月等&#xf…

【 C语言 】 | C程序百例

【 C语言 】 | C程序百例 时间&#xff1a;2023年12月28日13:50:43 文章目录 【 C语言 】 | C程序百例1.参考2.练习 1.参考 1.【 C语言 】 | C程序百例-CSDN博客 2.100Example: C程序百例-酷勤网&#xff08;kuqin.com&#xff09;提供.pdf (gitee.com) 3.cProgram/LinuxC - 码…

[JS设计模式] Module Pattern

随着应用程序和代码库的增长&#xff0c;保持代码的可维护性和模块化变得越来越重要。模块模式允许将代码分成更小的、可重用的部分。 除了能够将代码分割成更小的可重用部分之外&#xff0c;模块还允许将文件中的某些值保留为私有。默认情况下&#xff0c;模块内的声明范围(封…

Qt编写的exe程序上添加程序信息

1、qtcreator编写 在pro文件中添加如下信息 # 版本信息 VERSION 4.0.2.666# 图标 RC_ICONS Images/MyApp.ico# 公司名称 QMAKE_TARGET_COMPANY "Digia"# 产品名称 QMAKE_TARGET_PRODUCT "Qt Creator"# 文件说明 QMAKE_TARGET_DESCRIPTION "Qt …

Android : 画布的使用 简单应用

示例图&#xff1a; MyView.java&#xff1a; package com.example.demo;import android.content.Context; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.view.Vi…

node-red:modbus协议数据格式转换

node-red&#xff1a;MODBUS协议数据格式转换 一、32word无符号转换1.1 写操作1.2 读操作 二、字符串转换2.1 字符串写操作2.2 字符串读操作 三、有符号整数转换3.1 有符号16word转换3.1.1 负数 读 操作3.1.2 负数 写 操作 3.2 有符号32word转换 源码 本文将描述通过node-red采…

2024年【北京市安全员-B证】证考试及北京市安全员-B证模拟考试题库

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年【北京市安全员-B证】证考试及北京市安全员-B证模拟考试题库&#xff0c;包含北京市安全员-B证证考试答案和解析及北京市安全员-B证模拟考试题库练习。安全生产模拟考试一点通结合国家北京市安全员-B证考试最新…

本地部署 text-generation-webui

本地部署 text-generation-webui 0. 背景1. text-generation-webui 介绍2. 克隆代码3. 创建虚拟环境4. 安装 pytorch5. 安装 CUDA 运行时库6. 安装依赖库7. 启动 Web UI8. 访问 Web UI9. OpenAI 兼容 API 0. 背景 一直喜欢用 FastChat 本地部署大语言模型&#xff0c;今天试一…

GitOps实践指南:GitOps能为我们带来什么?

Git&#xff0c;作为开发过程中的核心工具&#xff0c;提供了强大的版本控制功能。即便在写代码的时候稍微手抖一下&#xff0c;我们也能通过 Git 的差异对比&#xff08;diff&#xff09;轻松追踪到庞大工程中的问题&#xff0c;确保代码的准确与可靠。这种无与伦比的自省能力…

python如何通过日志分析加入黑名单

python通过日志分析加入黑名单 监控nginx日志&#xff0c;若有人攻击&#xff0c;则加入黑名单&#xff0c;操作步骤如下&#xff1a; 1.读取日志文件 2.分隔文件&#xff0c;取出ip 3.将取出的ip放入list&#xff0c;然后判读ip的次数 4.若超过设定的次数&#xff0c;则加…

面向对象(高级)知识点强势总结!!!

文章目录 一、知识点复习1-关键字&#xff1a;static1、知识点2、重点 2-单例模式&#xff08;或单子模式&#xff09;1、知识点2、重点 3-理解main()方法1、知识点2、重点 4-类的成员之四&#xff1a;代码块1、知识点2、重点 5-关键字&#xff1a;final1、知识点2、重点 6-关键…

Python 网络编程之搭建简易服务器和客户端

用Python搭建简易的CS架构并通信 文章目录 用Python搭建简易的CS架构并通信前言一、基本结构二、代码编写1.服务器端2.客户端 三、效果展示总结 前言 本文主要是用Python写一个CS架构的东西&#xff0c;包括服务器和客户端。程序运行后在客户端输入消息&#xff0c;服务器端会…