东宝商城项目(二)——flask-script模块、flask-migrate模块和项目日志配置

news2024/11/25 12:50:00

学习flask-script模块的使用

1、什么是flask-script

flask-script是flask的一个扩展模块,Flask-Script的作用是可以通过命令行的形式来操作Flask。

2、安装flask-script

pip install flask-script

3、flask-script的使用

例如有这样一种需求:

我们需要通过命令来执行模块中的hello函数,代码如下:

from flask_script import Manager
from Shopping import create_app

app = create_app('develop')

manager = Manager(app)

@manager.command
def hello():
    print("您的命令已经成功执行!")

if __name__ == '__main__':
    manager.run()

用命令来执行函数:

函数执行成功。 

4、小结

通过命令来调用函数或者某些方法方便快捷,一般由管理员来进行操作,可以实现命令添加用户到数据库等一系列操作,使用频率较低。

flask-migrate数据库模型映射

1、flask-migrate功能

用来进行数据库的迁移映射

2、安装flask-migrate

pip install flask-migrate

3、flask-migrate的使用

# 通过执行命令创建数据的表
from flask_migrate import Migrate,MigrateCommand
from flask_script import Manager
from Shopping import create_app
from comment.models import db

# 初始化app
app = create_app('develop')
manager = Manager(app)
Migrate(app,db)
manager.add_command('shopping_db',MigrateCommand)

if __name__ == '__main__':
    manager.run()

4、在终端执行命令(将模型映射到数据库)

  • 初始化一个环境:python db_manage.py db init,会生成一个migrations文件夹和如下文件
  • 自动检测模型,生成迁移脚本:python db_manage.py db migrate
  • 将迁移脚本映射到数据库中:python db_manage.py db upgrade
  • 更多命令:python db_manage.py db --help

依此在终端执行以上前三个命令,第四个命令可以查看更多用法。

第一个init命令只需要执行一次,如果后续还有新模型需要映射到数据库的时候,只需要执行migrate和upgrade命令即可。

项目日志配置

我们项目里,需要在初始化APP的时候,初始化日志;

便于加载APP的时候,顺便也加载日志。

1、为什么要做日志配置

便于回溯工作内容。

例如:我们开发小组的程序在我们休息期间运行产生错误,会返回错误信息(默认输出到控制台),我们无法即使发现并且处理,我们就需要做项目日志配置,便于记录程序运行中出现的问题。

2、日志的配置

# 日志等级默认为DEBUG
LOGGING_LEVEL = 'DEBUG'
# 日志存储相对路径
LOGGING_FILE_DIR = 'logs/'
# 日志大小
LOGGING_FILE_MAX_BYTES = 300*1024*1024
# 日志备份数目为10
LOGGING_FILE_BACKUP = 10

3、设置日志输出格式

 

import logging
import logging.handlers
from flask import request
import os

class RequestShoppingFormatter(logging.Formatter):
    """
    自定义的日志输出格式
    """

    def format(self, record):
        record.url = request.url  # 需要在日志中记录请求地址
        record.remote_addr = request.remote_addr  # 需要在日志中记录客户端的地址
        return super().format(record)


# 创建一个个性化的logger对象
def create_logger(app):
    """
    设置日志配置
    :param app: Flask中的app对象
    :return:
    """
    logging_file_dir = app.config['LOGGING_FILE_DIR']  # 日志文件所在的目录
    logging_file_max_bytes = app.config['LOGGING_FILE_MAX_BYTES']  # 日志文件最大的大小
    logging_file_backup = app.config['LOGGING_FILE_BACKUP']  # 保留备份的日志文件个数
    logging_level = app.config['LOGGING_LEVEL']  # 默认的日志级别

    # 设置日志的输出格式(针对文件)
    request_formatter = RequestShoppingFormatter(
        '[%(asctime)s] %(remote_addr)s  请求 %(url)s \t %(levelname)s 在 %(module)s %(lineno)d : %(message)s')


    # 检查如果目录不存在,则创建目录
    if os.path.isdir(logging_file_dir):
        pass
    else:
        os.mkdir(logging_file_dir)  # 如果目录不存在,创建

    # 自定义一个目录和日志文件
    flask_file_handler = logging.handlers.RotatingFileHandler(filename=os.path.join(logging_file_dir, 'shopping.log'),
                                         maxBytes=logging_file_max_bytes,
                                         backupCount=logging_file_backup)

    # 给当前的handler设置格式
    flask_file_handler.setFormatter(request_formatter)
    # 得到一个logger对象
    flask_logger = logging.getLogger('Shopping')
    flask_logger.addHandler(flask_file_handler)
    flask_logger.setLevel(logging_level)

    # 整个项目需要两个handler:文件,控制台
    flask_console_handler = logging.StreamHandler()
    flask_console_handler.setFormatter(logging.Formatter('[%(asctime)s] %(levelname)s %(module)s %(lineno)d : %('
                                                         'message)s'))

    # 当项目运行环境是debug,才用控制台输出
    if app.debug:
        flask_logger.addHandler(flask_console_handler)

4、运行主程序main.py,日志记录会输出到文档中

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

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

相关文章

李彦宏开年定调“百度式创新”:反馈驱动,坚定技术

今天在百度热搜看到这么一条置顶话题,让我印象深刻:读懂中国经济的信心所在。 站在2023年起点,无论你是阳了、没阳,还是阳康了,之于个人、企业组织,都太需要信心和激励了。 点进去后是一篇来自《人民日报 …

小程序直播加速抢占电商流量先机

临近春节,到了购置年货的时候,相信有不少小伙伴被淘宝、拼多多、抖音等各大平台的直播卖货吸引。近年来,大家逐渐发现视频直播的影响力已经渗透到各行各业,通过直播带来的流量,不少商家赚得盆满钵满。视频直播这块流量…

Autosar MCAL-GPT配置及使用

文章目录前言GPTGptChannelConfigSetGptChannelIdGptChannelModeGptChannelTickFrequencyGptChannelTickValueMaxGptEnableWakeupGptNotificationGptChannelClkSrcRefGptAssignedHwUnitGptConfigurationOfOptApiServicesGptDeinitApiGptEnableDisableNotificationApiGptTimeEla…

系列33 Flow_Model

Introduction 在上一小节中讲到了Latent Variable Model(LAM),VAE。其主要思想就是将隐变量扩充为高维连续的分布,来增强模型的表达能力。而LAM模型中的核心困难是计算不出来,因为,而的维度过高算不出来。而…

GAN Step By Step -- Step7 WGAN

GAN Step By Step 心血来潮 GSBS,顾名思义,我希望我自己能够一步一步的学习GAN。GAN 又名 生成对抗网络,是最近几年很热门的一种无监督算法,他能生成出非常逼真的照片,图像甚至视频。GAN是一个图像的全新的领域&#…

2022 OceanBase 年度报告|用技术让海量数据的管理和使用更简单!

尊敬的各位客户、合作伙伴和开发者: 从 2020 年 6 月 1 日 OceanBase 开启商业化至今,我们一起走过了 900 多天。 从 0.5 到 3.x,我们花了近十年时间,而从 3.x 到 4.x 只用了不到两年,这是 OceanBase 和客户、伙伴、…

C++ 开发环境其实挺难搞的(上)

所谓工欲善其事,必先利其器,我将用两节课的内容向大家介绍 C 的开发工具及开发环境的一些知识。 Visual Studio 诞生至今已有 25 年以上的历史,功能强大,用的人非常多,社区的朋友戏称它为宇宙最强大的 IDE&#xff0c…

LeetCode 147. 对链表进行插入排序

🌈🌈😄😄 欢迎来到茶色岛独家岛屿,本期将为大家揭晓LeetCode 147. 对链表进行插入排序,做好准备了么,那么开始吧。 🌲🌲🐴🐴 一、题目名称 二、…

ECC原理和RocketChip Cache ECC实现

一、ECC原理说明ECC(Error Correcting Code)全称为错误纠正码,用于对存储器的数据进行完整性检查和纠正,主要用在SRAM、DDR、NAND等存储器设备上。ECC可以对数据进行单比特的纠错和多比特的检错,其原理基于汉明码编码而来。下图是ECC编码的主…

如何通过光耦合器连接继电器

如何通过光耦合器连接继电器 介绍 以下文章介绍如何使用隔离方法或通过光耦合器器件驱动继电器。我们将学习三种方法,第一种方法是将继电器直接连接到光耦合器输出引脚,第二种方法是使用外部PNP晶体管,第三种方法是使用外部NPN晶体管。任何…

二十九、Docker (5)

🌻🌻 目录一、Maven Docker 插件构建 Docker 镜像1.1 maven Docker 插件构建 Docker 镜像入门1.2 maven Docker 插件构建 Docker 镜像,自定义 DockerFile1.3 maven Docker 插件构建并推送镜像到 Docker 私有仓库二、手动发布部署微服务项目到…

类与对象(三):stactic成员、友元、内部类

类与对象(三)1. 再谈构造函数1.1 构造函数体赋值1.2 初始化列表1.3 explicit关键字2. static成员2.1 概念特性类中成员变量区别(普通变量和static变量):普通成员函数和静态成员函数的区别3. 友元友元函数友元类cout打印自定义类型…

24种代码坏味道和重构手法

最近,小李感觉公司女生们看他的眼神不太对劲了,那种笑容好像是充满慈爱的、姨母般的笑容。 作为一名老实本分的程序员,小李不太习惯这种被人过度关注的感觉,他不知道发生了什么。 小李和小王的关系似乎过于亲密,还经…

ZooKeeper 安装

ZooKeeper 安装 1. 下载安装 1、环境准备 ZooKeeper服务器是用Java创建的,它运行在JVM之上。需要安装JDK 7或更高版本。 2、上传 将下载的ZooKeeper放到/opt/ZooKeeper目录下 #上传zookeeper altp put f:/setup/apache-zookeeper-3.5.6-bin.tar.gz #打开 opt目…

(十)devops持续集成开发——jenkins流水线发布一个docker harbor仓库版的后端maven项目

前言 本节内容我们使用jenkins流水线组件发布一个docker环境的后端maven项目,并使用docker的harbor仓库完成镜像的存储,通过拉取harbor仓库中的项目镜像,完成后端项目的发布,关于harbor仓库的搭建,可以参考往期博客内…

Python学习笔记之模块

可迭代对象 概念:更新换代,每次更新都是根据上一次的结果作为基础。 有哪些:字符串,列表,字典,元组,集合,文件对象,特殊函数(生成器) 迭代器对…

软件测试/测试开发 | AppCrawler 自动遍历测试工具实践(一)

本文为霍格沃兹测试学院学院学员课程学习笔记。 公众号搜索:TestingStudio 霍格沃兹的干货都很硬核 AppCrawler 是由霍格沃兹测试学院校长思寒开源的一个项目,通过名字我们大概也能猜出个方向,Crawler 是爬虫的意思,App 的爬虫&am…

GitHub上标星79K的LeetCode算法小抄开放下载了

在大厂面试中我们不可避免的会考到算法,为什么大厂一定要考察算法呢?因为它包含了太多的逻辑思维,可以考察你思考问题的逻辑和解决问题的能力;这一点也是面试官比较看重的,因为它可以反映出你的潜力,我曾经…

Qt布局管理器(QHBoxLayout,QVBoxLayout)

文章目录布局管理器是什么使用代码添加布局管理器QVBoxLayoutQHBoxLayout使用ui文件添加布局管理器布局管理器的嵌套提示:以下是本篇文章正文内容,下面案例可供参考 布局管理器是什么 可以把一些组件按一定的次序排列,这就是布局管理器。 他…

反欺诈指南|网购平台如何保障公平交易

网购平台是社会零售重要的组成部分。国家统计数据显示,2021年,全国实物商品网上零售额达10.8万亿元,占社会消费品零售总额的比重为24.5%,对社会消费品零售总额增长的贡献率为23.6%。 网购平台促成买卖双方交易而建立的平台&#…