[Python]mini-Web框架(三)

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: [Python]mini-Web框架(三)

7. 个人中心数据接口的开发

个人中心数据接口的开发,需要根据sql语句查询个人中心数据,然后将个人中心数据转成json字符串并返回。

python 数据类型与 json 类型的转化表:

来源:python中的元组与json类型转化问题

可以json.dumps函数把字典转成json字符串

  • json.dumps用于将 Python 对象 编码成 JSON 字符串。
  • 需要导入包import json
  • 函数的第一个参数 obj 表示要把指定对象转成json字符串
  • 参数的第二个参数ensure_ascii=False表示不使用ascii编码,可以在控制台显示中文。
  • indent=True参数根据数据格式缩进显示,读起来更加清晰。

响应头添加Content-Type表示指定数据的编码格式,防止数据到浏览器乱码。

# 响应头信息
    # 这里使用列表套元组的方法存放信息,每个元组为一个信息
    response_header = [
      ('Server', 'PWS/1.1'), 
      # 设置数据的编码格式为 utf-8
      ('Content-Type', 'text/html;charset=utf-8')
    ]
# 个人中心数据接口
# 绑定请求资源路径
@route('/center_data.html')
def center_data():
    # 从数据库中查询数据
    # 创建与数据库的连接对象
    conn = pymysql.connect(
        host='localhost',
        port=3306,
        user='root',
        password='285013',
        database='stock_db',
        charset='utf8'
    )
    # 获取执行sql的游标对象
    cur = conn.cursor()
    # sql
    sql = '''select i.code, i.short, i.chg, 
             i.turnover, i.price, i.highs, f.note_info 
             from info as i inner join focus as f on i.id = f.info_id;'''
    # 执行sql
    cur.execute(sql)
    # 获取全部结果
    result = cur.fetchall()
    # print(result)
    # 将结果由元组转成列表(元组转成json字符串会报错),元组内的每个小元组转成字典
    # 遍历元组中的每个元素,每个元素(每个小元组)取出值放到字典中
    # 最后字典组成列表
    center_data_list = [
        {
            'code': row[0],
            'short': row[1],
            'chg': row[2],
            'turnover': row[3],
            # Decimal不能转json,会报错
            'price': str(row[4]),
            'highs': str(row[5]),
            'note_info': row[6],
        } for row in result
    ]
    # print(center_data_list)
    # 列表转成json字符串
    # ensure_ascii=False表示可以在控制台显示中文。
    # indent:参数根据数据格式缩进显示,读起来更加清晰。
    json_str = json.dumps(center_data_list, ensure_ascii=False, indent=True)
    # print(json_str)
    # 状态信息
    status = '200 OK'
    # 响应头信息
    # 这里使用列表套元组的方法存放信息,每个元组为一个信息
    response_header = [('Server', 'PWS/1.1'), ('Content-Type', 'text/html;charset=utf-8')]
    # 关闭对象
    cur.close()
    conn.close()
    # 向浏览器返回数据
    return status, response_header, json_str

8. logging日志

8.1 logging日志的介绍

在现实生活中,记录日志非常重要,比如:银行转账时会有转账记录;飞机飞行过程中,会有个黑盒子(飞行数据记录器)记录着飞机的飞行过程,那在python程序中想要记录程序在运行时所产生的日志信息,可以使用 logging 这个包来完成。

8.2 记录程序日志信息的目的是

  1. 可以很方便的了解程序的运行情况
  2. 可以分析用户的操作行为、喜好等信息
  3. 方便开发人员检查bug

8.3 logging日志级别介绍

日志等级可以分为5个,从低到高分别是:

  • DEBUG:程序调试bug时使用
  • INFO:程序正常运行时使用
  • WARNING:程序未按预期运行时使用,但并不是错误,如:用户登录密码错误
  • ERROR:程序出错误时使用,如:IO操作失败
  • CRITICAL:特别严重的问题,导致程序不能再继续运行时使用,如:磁盘空间为空,一般很少使用

默认的是WARNING等级,当在WARNING或WARNING之上等级的才记录日志信息。

日志等级从低到高的顺序是: DEBUG < INFO < WARNING < ERROR < CRITICAL

8.4 logging日志的使用

在 logging 包中记录日志的方式有两种:

  1. 输出到控制台
  2. 保存到日志文件

8.4.1 日志信息输出到控制台的示例代码

import logging
logging.debug('这是一个debug级别的日志信息')
logging.info('这是一个info级别的日志信息')
logging.warning('这是一个warning级别的日志信息')
logging.error('这是一个error级别的日志信息')
logging.critical('这是一个critical级别的日志信息')

由于默认的是WARNING等级,在WARNING或WARNING之上等级的才记录日志信息,所以WARNING以下的两个等级DEBUG、INFO都不显示。

8.4.2 logging日志等级和输出格式的设置

设置logging的配置信息,使用:

logging.basicConfig()
  • level 表示设置的日志等级
  • format 表示日志的输出格式, 参数说明:
  • %(levelname)s: 打印日志级别名称
  • %(filename)s: 打印当前执行程序名
  • %(lineno)d: 打印日志的当前行号,程序运行的行号
  • %(asctime)s: 打印日志的时间,获取当前时间
  • %(message)s: 打印日志信息

改变logging日志等级:

# 导入包
import logging
# 设置logging日志等级为DEBUG
logging.basicConfig(level=logging.DEBUG)
logging.debug('这是一个debug级别的日志信息')
logging.info('这是一个info级别的日志信息')
logging.warning('这是一个warning级别的日志信息')
logging.error('这是一个error级别的日志信息')
logging.critical('这是一个critical级别的日志信息')

设置logging的输出格式:

# 导入包
import logging
# level 表示设置的日志等级
# format 表示日志的输出格式
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s')
logging.debug('这是一个debug级别的日志信息')
logging.info('这是一个info级别的日志信息')
logging.warning('这是一个warning级别的日志信息')
logging.error('这是一个error级别的日志信息')
logging.critical('这是一个critical级别的日志信息')

8.4.3 日志信息保存到日志文件

日志信息保存到日志文件,使用:

logging.basicConfig()
  • filename=" ":日志信息保存的文件名
  • filemode=" ":文件的打开方式
  • encoding=‘utf-8’:设置编码格式
# 导入包
import logging
# level 表示设置的日志等级
# format 表示日志的输出格式
logging.basicConfig(
    level=logging.DEBUG,
    format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s',
    filename='log.txt',
    filemode='a',
    encoding='utf-8'
)
logging.debug('这是一个debug级别的日志信息')
logging.info('这是一个info级别的日志信息')
logging.warning('这是一个warning级别的日志信息')
logging.error('这是一个error级别的日志信息')
logging.critical('这是一个critical级别的日志信息')

8.4.4 logging日志在mini-web项目中应用

logging日志配置信息在程序入口模块设置一次,整个程序都可以生效。

程序入口模块设置logging日志的设置

import socket
 import threading
 import sys
 import framework
 import logging
 # logging日志的配置
logging.basicConfig(
   level=logging.DEBUG,
     format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s',
   filename="log.txt",
   filemode="w",
     encoding='utf-8'
)

INFO级别的日志输出,示例代码

if request_path.endswith('.html'):
            logging.info('动态资源请求:'+ request_path)
            ...
        else:
            # 静态资源请求
            logging.info('静态资源请求:' + request_path)
            ...


相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
2月前
|
JSON 监控 BI
拼多多批量下单工具,拼多多买家批量下单软件,低价下单python框架分享
使用Selenium实现自动化操作流程多线程订单处理提升效率
|
2月前
|
机器人 数据安全/隐私保护 Python
企业微信自动回复软件,企业微信自动回复机器人,python框架分享
企业微信机器人包含完整的消息处理流程,支持文本消息自动回复、事件处理、消息加密解密等功能
|
2月前
|
JSON 数据安全/隐私保护 数据格式
拼多多批量下单软件,拼多多无限账号下单软件,python框架仅供学习参考
完整的拼多多自动化下单框架,包含登录、搜索商品、获取商品列表、下单等功能。
|
2月前
|
存储 API 数据库
自动发短信的软件,批量自动群发短信,手机号电话号生成器【python框架】
这个短信群发系统包含以下核心功能: 随机手机号生成器(支持中国号码) 批量短信发送功能(使用Twilio API)
|
2月前
|
JSON 机器人 API
微信机器人自动回复插件,vx自动回复机器人脚本助手,python框架分享
这个微信机器人系统包含三个主要模块:主程序基于itchat实现微信消息监听和自动回复功能
|
1月前
|
API 数据安全/隐私保护 Python
拼多多批量上架软件, 电商一键上货发布工具,python电商框架分享
多线程批量上传架构,支持并发处理商品数据 完整的拼多多API签名和token管理机制
|
2月前
|
前端开发 数据安全/隐私保护 Python
虚拟物流单号生成器, 虚拟快递单号假物流信息, 虚拟快递单号在线生成【python框架】
这个虚拟物流单号生成系统包含以下功能:支持多种主流快递公司的单号生成
|
2月前
|
消息中间件 存储 API
抖音私信协议软件,抖音群发私信的工具,抖音自动私信插件【python框架】
这个框架包含配置管理、消息队列、API客户端和主程序四个主要模块。配置管理负责存储账号信息和设置
|
2月前
|
数据采集 API 调度
Python爬虫框架对比:Scrapy vs Requests在API调用中的应用
本文对比了 Python 中 Scrapy 与 Requests 两大爬虫框架在 API 调用中的差异,涵盖架构设计、调用模式、性能优化及适用场景,并提供实战建议,助力开发者根据项目需求选择合适工具。
|
2月前
|
API 数据安全/隐私保护 Python
贴吧私信自动群发神器,百度贴吧群发批量私信脚本插件,python框架分享
这个贴吧私信群发工具包含三个主要文件:主程序、配置文件和入口文件。主程序实现了登录

热门文章

最新文章

推荐镜像

更多