[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)
            ...


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
2月前
|
安全 关系型数据库 测试技术
学习Python Web开发的安全测试需要具备哪些知识?
学习Python Web开发的安全测试需要具备哪些知识?
38 4
|
4天前
|
安全 前端开发 数据库
Python 语言结合 Flask 框架来实现一个基础的代购商品管理、用户下单等功能的简易系统
这是一个使用 Python 和 Flask 框架实现的简易代购系统示例,涵盖商品管理、用户注册登录、订单创建及查看等功能。通过 SQLAlchemy 进行数据库操作,支持添加商品、展示详情、库存管理等。用户可注册登录并下单,系统会检查库存并记录订单。此代码仅为参考,实际应用需进一步完善,如增强安全性、集成支付接口、优化界面等。
|
21天前
|
JSON 数据可视化 测试技术
python+requests接口自动化框架的实现
通过以上步骤,我们构建了一个基本的Python+Requests接口自动化测试框架。这个框架具有良好的扩展性,可以根据实际需求进行功能扩展和优化。它不仅能提高测试效率,还能保证接口的稳定性和可靠性,为软件质量提供有力保障。
52 7
|
19天前
|
分布式计算 大数据 数据处理
技术评测:MaxCompute MaxFrame——阿里云自研分布式计算框架的Python编程接口
随着大数据和人工智能技术的发展,数据处理的需求日益增长。阿里云推出的MaxCompute MaxFrame(简称“MaxFrame”)是一个专为Python开发者设计的分布式计算框架,它不仅支持Python编程接口,还能直接利用MaxCompute的云原生大数据计算资源和服务。本文将通过一系列最佳实践测评,探讨MaxFrame在分布式Pandas处理以及大语言模型数据处理场景中的表现,并分析其在实际工作中的应用潜力。
57 2
|
1月前
|
敏捷开发 测试技术 持续交付
自动化测试之美:从零开始搭建你的Python测试框架
在软件开发的马拉松赛道上,自动化测试是那个能让你保持节奏、避免跌宕起伏的神奇小助手。本文将带你走进自动化测试的世界,用Python这把钥匙,解锁高效、可靠的测试框架之门。你将学会如何步步为营,构建属于自己的测试庇护所,让代码质量成为晨跑时清新的空气,而不是雾霾中的忧虑。让我们一起摆脱手动测试的繁琐枷锁,拥抱自动化带来的自由吧!
|
2月前
|
开发框架 搜索推荐 数据可视化
Django框架适合开发哪种类型的Web应用程序?
Django 框架凭借其强大的功能、稳定性和可扩展性,几乎可以适应各种类型的 Web 应用程序开发需求。无论是简单的网站还是复杂的企业级系统,Django 都能提供可靠的支持,帮助开发者快速构建高质量的应用。同时,其活跃的社区和丰富的资源也为开发者在项目实施过程中提供了有力的保障。
|
2月前
|
开发框架 JavaScript 前端开发
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势。通过明确的类型定义,TypeScript 能够在编码阶段发现潜在错误,提高代码质量;支持组件的清晰定义与复用,增强代码的可维护性;与 React、Vue 等框架结合,提供更佳的开发体验;适用于大型项目,优化代码结构和性能。随着 Web 技术的发展,TypeScript 的应用前景广阔,将继续引领 Web 开发的新趋势。
45 2
|
2月前
|
开发者 Docker Python
从零开始:使用Docker容器化你的Python Web应用
从零开始:使用Docker容器化你的Python Web应用
55 1
|
2月前
|
JSON 前端开发 API
使用Python和Flask构建简易Web API
使用Python和Flask构建简易Web API
121 3
|
2月前
|
监控 安全 测试技术
如何在实际项目中应用Python Web开发的安全测试知识?
如何在实际项目中应用Python Web开发的安全测试知识?
36 4