flask实战-个人博客-使用类组织配置

使用类组织配置

在实际需求中,我们往往需要不同的配置组合。例如,开发用的配置,测试用的配置,生产环境用的配置。为了能方便地在这些配置中切换,你可以把配置文件升级为包,然后为这些使用场景分别创建不同的配置文件,但是最方便的做法是在单个配置文件中使用python类来组织多个不同类别的配置。

下面的代码是personalBlog的配置文件,现在它包含一个基本配置类(BaseConfig),还有其他特定的配置类,即测试配置类(TestingConfig)、开发配置类(DevelopmentConfig)和生产配置类(ProductionConfig),这些特定配置类都继承自基本配置类。

personalBlog/setting.py: 使用python类组织配置

import os
import sys

basedir = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))

#SQLite URI compatible
WIN = sys.platform.startswith(‘win‘)
if WIN:
    prefix = ‘sqlite:///‘
else:
    prefix = ‘sqlite:////‘

class BaseConfig(object):
    SECRET_KEY = os.getenv(‘SECRET_KEY‘, ‘secret string‘)

    DEBUG_TB_INTERCREPT_REDIRECTS = False

    SQLALCHEMY_TRACK_MODIFICATIONS = False

    MAIL_SERVER = os.getenv(‘MAIL_SERVER‘)
    MAIL_PORT = 465
    MAIL_USE_SSL = True
    MAIL_USERNAME = os.getenv(‘MAIL_USERNAME‘)
    MAIL_PASSWORD = os.getenv(‘MAIL_PASSWORD‘)
    MAIL_DEFAULT_SENDER = (‘persnalBlog Admin‘, MAIL_USERNAME)

    PERSONALBLOG_EMAIL = os.getenv(‘PERSOANLBLOG_EMAIL‘)
    PERSONALBLOG_POST_PER_PAGE = 10
    PERSONALBLOG_MAMAGE_POST_PER_PAGE = 15
    PERSONALBLOG_COMMENT_PER_PAGE = 15

class DevelopmentConfig(BaseConfig):
    SQLALCHEMY_DATABASE_URI = ‘sqlite:///‘ + os.path.join(basedir, ‘data-dev.db‘)

class TestingConfig(BaseConfig):
    TESTING = True
    WTF_CSRF_ENABLED = False
    SQLALCHEMY_DATABASE_URI = ‘sqlite:///:memory:‘  # in-memory database

class ProductionConfig(BaseConfig):
    SQLALCHEMY_DATABASE_URI = os.getenv(‘DATABASE_URL‘, ‘sqlite:///‘ + os.path.join(basedir, ‘data.db‘))

config = {
    ‘development‘: DevelopmentConfig,
    ‘testing‘: TestingConfig,
    ‘production‘: ProductionConfig
}

在新版本的配置中,我们为不同的使用场景设置了不同的数据库URL,避免互相干扰。生产环境下优先从环境变量DATABASE_URL读取,如果没有获取到则使用SQLite,文件名为data.db(在实际生产中我们通常会使用更健壮的DBMS,这里只是示例),在开发时用的数据库文件名为data-dev.db,而测试时的配置则使用SQLite内存型数据库卡。为了获取数据库文件的路径,我们使用os模块的方法创建了一个定位到项目根目录的basedir变量,最终的绝对路径通过os.path模块的方法基于当前脚本的特殊变量__file__获取。

在配置文件的底部,我们创建了一个存储配置名称和对应配置类的字典,用于在创建程序实例时通过配置名称来获取对应的配置类。现在我们在创建程序实例后使用app.config.from_object()方法加载配置,传入配置类:

from personalBlog.settings import config

app = Flask(‘personalBlog‘)
config_name = os.getenv(‘FLASK_CONFIG‘, ‘development‘)
app.config.from_object(config[config_name])

我们首先从配置文件中导入匹配配置名到配置类的config字典。为了方便修改配置类型,配置名称会先从环境变量FLASK_CONFIG中导入,从环境变量加载配置可以方便地在不改动代码的情况下切换配置。这个值可以在.flaskenv文件中设置,如果没有获取到,则使用默认值development,对应的配置类即DevelopmentConfig。

Flask并不限制你存储和加载配置的方式,可以使用JSON文件存储配置,然后使用app.config.from_json()方法导入;也可以使用INI风格的配置文件,然后自己手动导入。

在后续的示例中,我们都使用python类来组织配置。包含敏感信息的配置会从环境变量获取,这些配置值存储在.env文件中。当安装了python-dotenv并使用Flask内置的run命令启动程序时,.env文件的环境变量会被自动设置。

原文地址:https://www.cnblogs.com/xiaxiaoxu/p/10798357.html

时间: 2024-08-08 17:15:15

flask实战-个人博客-使用类组织配置的相关文章

flask实战-个人博客-模板

模板 personalBlog采用典型的博客布局,左侧三分之二为主体,显示文章列表.正文:右侧三分之一为边栏,显示分为类列表.社交链接等.现在的工作是将HTML文件加工为模板,并创建对应的表单类,在模板中渲染. 并非所有的页面都需要添加边栏,所以我们不能把它放到基模板中.为了避免重复和易于维护,我们把边栏部分的代码放到了局部模板_sidebar.html中.除了基模板base.html和存储宏的macros.html模板,personalBlog程序的博客前台使用的模板如下所示: index.h

flask实战-个人博客-编写博客前台

编写博客前台 博客前台需要开放给所有用户,这里包括显示文章列表.博客信息.文章内容和评论等功能功能. 分页显示文章列表 为了在主页显示文章列表,我们要先在渲染主页模板的index视图的数据库中获取所有文章记录并传入模板: blueprints\blog.py: from personalBlog.models import Post @blog_bp.route('/') def index(): posts = Post.query.order_by(Post, timestamp.desc(

flask实战-个人博客-程序骨架、创建数据库模型、临接列表关系

编写程序骨架 personalBlog的功能主要分为三部分:博客前台.用户认证.博客后台,其中包含的功能点如下图所示: 数据库 personalBlog一共需要使用四张表,分别存储管理员(Admin).分类(Category),文章(Post)和评论(Comment). 1.创建数据库模型 1)管理员 如果是编写一个固定的个人博客,那么事情就要简单得多,博客的大部分固定信息(比如博客标题,页脚信息等)都可以直接写死在模板中,或是使用自定义的配置存储在配置文件中.但是我们希望编写的是一个通用的博客

flask实战-个人博客-电子邮件支持

电子邮件支持 因为博客要支持评论,所以我们需要在文章有了新评论后发邮件通知管理员.而且,当管理员回复了读者的评论后,也需要发送邮件提醒读者. 为了方便读者使用示例程序,personalBlog中仍然使用Flask-Mail来发送邮件.读者在运行程序前需要在项目根目录内创建.env文件写入对应的环境变量,以便让发信功能正常工作. 因为邮件的内容很简单,我们将直接在发信函数中写出正文内容,这里只提供了HTML正文.我们有两个需要使用电子邮件的场景: 1.当文章有新评论时,发送邮件给管理员: 2.当某

用flask开发个人博客(4)—— flask中4种全局变量

https://blog.csdn.net/hyman_c/article/details/53512109 一  current_app current_app代表当前的flask程序实例,使用时需要flask的程序上下文激活,我们以本专栏第一篇文章中写的test.py为例介绍下它的用法: 1.1 激活程序上下文 [python] view plain copy >>> from test import app >>> from flask import curren

Flask之十——博客文章

1. 提交和显示博客文章 app/models.py: 博客文章模型 class Post(db.Model): __tablename__ = 'posts' id = db.Column(db.Integer, primary_key=True) body = db.Column(db.Text) timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow) author_id = db.Column(db.I

Python Flask开源个人博客代码

没有写html模板继承,有时间再补吧,或者感兴趣的自己抽取一下 博客演示站点:http://www.7z1.xyz/ 如出现未备案,请直接访问:http://119.23.230.6/ 后台管理地址:/admin/login 账号:admin 密码:admin 前端代码链接:https://pan.baidu.com/s/1EDDD_ct4eYgxOlpzZw7IVA 密码:bgc2 解压密码:yangqq.com 安装过程: 1. 下载源码git clone https://github.co

Python爬取CSDN专家博客系类——移动开发

文章分为两部分:爬取移动开发专家的姓名和博客首页地址,爬取每个专家的所有博客存放在已该专家名字命名的txt文件中 说明:本爬虫主要是采用BeautifulSoup和少量的正则匹配,在第一部分抓取完毕后需要将文件格式改为ANSI,代码如下: 第一部分: 第二部分: 结果如下图: 版权声明:本文为博主原创文章,未经博主允许不得转载.

Ubuntu14.04LTS下安装Node.js&NPM以及个人博客hexo的初始化配置

什么是hexo Hexo 是一款基于node 的静态博客网站生成器作者 :tommy351是一个台湾的在校大学生...相比其他的静态网页生成器而言有着,生成静态网页最快,插件丰富(已经移植了大量Octopress插件).同其他很多轻量级博客如jekyll.octopress.jekyllbootstrap等一样,也是 使用Markdown语法进行编辑博文,关于Markdown不用怕,推荐搜索维基上面的语法示例,有中文版本http://zh.wikipedia.org/wiki/Markdown,