Flask 学习 十六 部署

部署流程

manage.py 部署命令 每次安装升级只需运行deploy命令即可完成操作

@manager.command
def deploy():
    """执行部署任务"""
    from flask_migrate import upgrade
    from app.models import Role, User
    # 把数据库迁移到最新修订版本
    upgrade()
    # 创建用户角色
    Role.insert_roles()
    # 让所有用户都关注此用户
    User.add_self_follows()

把生产环境中的错误写入日志

config.py 程序出错时发送电子邮件

class ProductionConfig(Config):
    SQLALCHEMY_DATABASE_URI = os.environ.get(‘DATABASE_URL‘) or ‘sqlite:///‘ + os.path.join(basedir,‘data.sqlite‘)

    @classmethod
    def init_app(cls,app):
        Config.init_app(app)

        # 把错误通过电子邮件发送给管理员
        import logging
        from logging.handlers import SMTPHandler
        credentials = None
        secure = None
        if getattr(cls,‘MAIL_USERNAME‘,None) is not None:
            credentials = (cls.MAIL_USERNAME,cls.MAIL_PASSWORD)
            if getattr(cls,‘MAIL_USE_TLS‘,None):
                secure=()
        mail_handler = SMTPHandler(
            mailhost=(cls.MAIL_SERVER,cls.MAIL_PORT),
            fromaddr=cls.FLASKY_MAIL_SENDER,
            toaddrs=[cls.FLASKY_ADMIN],
            subject=cls.FLASKY_MAIL_SUBJECT_PREFIX+‘Application Error‘,
            credentials=credentials,
            secure=secure
        )
        mail_handler.setLevel(logging.ERROR)
        app.logger.addHandler(mail_handler)
时间: 2024-10-09 18:52:08

Flask 学习 十六 部署的相关文章

Java编程思想学习(十六) 并发编程

线程是进程中一个任务控制流序列,由于进程的创建和销毁需要销毁大量的资源,而多个线程之间可以共享进程数据,因此多线程是并发编程的基础. 多核心CPU可以真正实现多个任务并行执行,单核心CPU程序其实不是真正的并行运行,而是通过时间片切换来执行,由于时间片切换频繁,使用者感觉程序是在并行运行.单核心CPU中通过时间片切换执行多线程任务时,虽然需要保存线程上下文,但是由于不会被阻塞的线程所阻塞,因此相比单任务还是大大提高了程序运行效率. 1.线程的状态和切换: 线程的7种状态及其切换图如下: 2.多线

java web 学习十六(JSP指令)

一.JSP指令简介 JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分. 在JSP 2.0规范中共定义了三个指令: page指令 Include指令 taglib指令 JSP指令的基本语法格式:<%@ 指令 属性名="值" %> 例如: 1 <%@ page contentType="text/html;charset=gb2312"%> 如果一个指令有多个属性,

java学习(十六):对象的自定义比较,Comparator和Comparable

通过两个例子实现对象的自定义排序 1.实现Comparator接口. 1 import java.util.ArrayList; 2 import java.util.Collections; 3 import java.util.Comparator; 4 import java.util.List; 5 6 public class StudentComparator implements Comparator<Object> 7 { 8 @Override 9 public int co

学习十六

4.10/4.11/4.12 lvm讲解 4.13 磁盘故障小案例lvm讲解首先检查一下是否安装lvmlvm的优缺点lvm很方便的去创建和整合分区,但是假如用盘分区出现问题需要恢复文件的时候可能会出现很难恢复的问题 起始lvm 是创建物理分区 创建物理卷,在组建物理卷组 再组建逻辑分区 再格式化 挂载使用要做的准备fdisk 创建三个1G的分区 ID为83为普通分区t更改类型为8e做物理卷 lvm ctrl+u 删除前面错误的内容下面创建物理卷假如查不到命令 可以采用通配的方法来查找命令在此处可

mybatis学习 十六 auto_mapping实现连表查询

只能使用多表联合查询方式. 要求:查询出的列别和属性名相同. 点字符  "."  在 SQL 是关键字符,两侧添加反单引号(Tab键上的一个字符) <select id="selAll" resultType="student"> select t.id `teacher.id`, t.name `teacher.name`, s.id id, s.name name,age,tid from student s LEFT JOIN

flask学习(十):模板中访问模型和字典的属性

访问模型中的属性或者是字典,可以通过{{params.property}}的形式,或者是使用{{params['age']}}这样的形式 原文地址:https://www.cnblogs.com/cnhkzyy/p/9690688.html

spring学习 十六 spring加载属性文件

第一步:创建一个properties文件,以数据库链接作为实例 db.properties jdbc.url=jdbc:mysql://192.168.153.128:3306/mybaties?characterEncoding=utf-8 jdbc.driver=com.mysql.jdbc.Driver jdbc.username=com.mysql.jdbc.Driver jdbc.password=123456 第二步在spring配置文件加入context的约束,并使用<contex

MySQL学习(十六)

MySQL高级部分 触发器 触发器是一类特殊的事务,可以监视某种数据操作(insert/update/delete),并触发相关的操作(insert/update/delete) 触发器创建语法之4要素 1 监视地点table 2 监视事件insert/update/delete 3 触发时间after/before 4 触发事件 查看已有的触发器 show triggers 删除已有的触发器 drop trigger triggerName 创建一个触发器 create trigger t1

前端学习(39)~js学习(十六):数组

数组简介 数组(Array)是属于内置对象,我们可以在MDN网站上查询各种方法. 数组和普通对象的功能类似,也是用来存储一些值的.不同的是: 普通对象是使用字符串作为属性名的,而数组是使用数字来作为索引来操作元素.索引:从0开始的整数就是索引. 数组的存储性能比普通对象要好.在实际开发中我们经常使用数组来存储一些数据,使用频率非常高. 数组中的元素可以是任意的数据类型,也可以是对象,也可以是函数,也可以是数组.数组的元素中,如果存放的是数组,我们就称这种数组为二维数组. 接下来,我们讲一讲数组的