抽取配置文件:

  1. import logging
  2. from redis import StrictRedis
  3.  
  4. class Config(object):
  5. """项目的配置"""
  6.  
  7. SECRET_KEY = "iECgbYWReMNxkRprrzMo5KAQYnb2UeZ3bwvReTSt+VSESW0OB8zbglT+6rEcDW9X"
  8.  
  9. # 为数据库添加配置
  10. SQLALCHEMY_DATABASE_URI = "mysql://root:mysql@127.0.0.1:3306/information27"
  11. SQLALCHEMY_TRACK_MODIFICATIONS = False
  12.  
  13. # Redis的配置
  14. REDIS_HOST = "127.0.0.1"
  15. REDIS_PORT = 6379
  16.  
  17. # Session保存配置
  18. SESSION_TYPE = "redis"
  19. # 开启session签名
  20. SESSION_USE_SIGNER = True
  21. # 指定 Session 保存的 redis
  22. SESSION_REDIS = StrictRedis(host=REDIS_HOST, port=REDIS_PORT)
  23. # 设置需要过期
  24. SESSION_PERMANENT = False
  25. # 设置过期时间
  26. PERMANENT_SESSION_LIFETIME = 86400 * 2
  27.  
  28. # 设置日志等级
  29. LOG_LEVEL = logging.DEBUG
  30.  
  31. class DevelopmentConfig(Config):
  32. """开发环境下的配置"""
  33. DEBUG = True
  34.  
  35. class ProductionConfig(Config):
  36. """生产环境下的配置"""
  37. DEBUG = False
  38. LOG_LEVEL = logging.WARNING
  39.  
  40. class TestingConfig(Config):
  41. """单元测试环境下的配置"""
  42. DEBUG = True
  43. TESTING = True
  44.  
  45. config = {
  46. "development": DevelopmentConfig,
  47. "production": ProductionConfig,
  48. "testing": TestingConfig
  49. }

抽取业务逻辑,创建app

  1. import logging
  2. from logging.handlers import RotatingFileHandler
  3.  
  4. from flask import Flask
  5. # 可以用来指定 session 保存的位置
  6. from flask.ext.session import Session
  7. from flask.ext.sqlalchemy import SQLAlchemy
  8. from flask.ext.wtf import CSRFProtect
  9. from redis import StrictRedis
  10.  
  11. from config import config
  12.  
  13. # 初始化数据库
  14. # 在Flask很多扩展里面都可以先初始化扩展的对象,然后再去调用 init_app 方法去初始化
  15. db = SQLAlchemy()
  16.  
  17. # https://www.cnblogs.com/xieqiankun/p/type_hints_in_python3.html
  18. redis_store = None # type: StrictRedis
  19. # redis_store: StrictRedis = None
  20.  
  21. def setup_log(config_name):
  22. # 设置日志的记录等级
  23. logging.basicConfig(level=config[config_name].LOG_LEVEL) # 调试debug级
  24. # 创建日志记录器,指明日志保存的路径、每个日志文件的最大大小、保存的日志文件个数上限
  25. file_log_handler = RotatingFileHandler("logs/log", maxBytes=1024 * 1024 * 100, backupCount=10)
  26. # 创建日志记录的格式 日志等级 输入日志信息的文件名 行数 日志信息
  27. formatter = logging.Formatter('%(levelname)s %(filename)s:%(lineno)d %(message)s')
  28. # 为刚创建的日志记录器设置日志记录格式
  29. file_log_handler.setFormatter(formatter)
  30. # 为全局的日志工具对象(flask app使用的)添加日志记录器
  31. logging.getLogger().addHandler(file_log_handler)
  32.  
  33. def create_app(config_name):
  34. # 配置日志,并且传入配置名字,以便能获取到指定配置所对应的日志等级
  35. setup_log(config_name)
  36. # 创建Flask对象
  37. app = Flask(__name__)
  38. # 加载配置
  39. app.config.from_object(config[config_name])
  40. # 通过app初始化
  41. db.init_app(app)
  42. # 初始化 redis 存储对象
  43. global redis_store
  44. redis_store = StrictRedis(host=config[config_name].REDIS_HOST, port=config[config_name].REDIS_PORT)
  45. # 开启当前项目 CSRF 保护,只做服务器验证功能
  46. CSRFProtect(app)
  47. # 设置session保存指定位置
  48. Session(app)
  49.  
  50. # 注册蓝图
  51. from info.modules.index import index_blu
  52. app.register_blueprint(index_blu)
  53.  
  54. return app

保留入口文件:

  1. from flask_script import Manager
  2. from flask_migrate import Migrate, MigrateCommand
  3. from info import create_app, db, models
  4.  
  5. # manage.py是程序启动的入口,只关心启动的相关参数以及内容,不关心具体该
  6. # 如果创建app或者相关业务逻辑
  7.  
  8. # 通过指定的配置名字创建对应配置的app
  9. # create_app 就类似于工厂方法
  10. app = create_app('development')
  11.  
  12. manager = Manager(app)
  13. # 将 app 与 db 关联
  14. Migrate(app, db)
  15. # 将迁移命令添加到manager中
  16. manager.add_command('db', MigrateCommand)
  17.  
  18. if __name__ == '__main__':
  19. manager.run()

Flask--(项目准备)--框架搭建,配置文件抽取,业务逻辑抽取的更多相关文章

  1. 发现 一个业务管理系统 解决了 orm 和 前端框架 剩下的 是 业务逻辑 了 。 哈

    解决了 orm 和 前端框架 剩下的 是 业务逻辑 了 . 哈 还有 各种 aop 组件 呢 . 大家 high 来 准备 用 fluent data  和 mysql 写一个 wcf 的 接口呢. ...

  2. flask 项目基本框架的搭建

    综合案例:学生成绩管理项目搭建 一 新建项目目录students,并创建虚拟环境 mkvirtualenv students 二 安装开发中使用的依赖模块 pip install flask==0.1 ...

  3. iOS项目——基本框架搭建

    项目开发过程中,在完成iOS项目——项目开发环境搭建之后,我们首先需要考虑的就是我们的项目的整体框架与导航架构设计,然后在这个基础上考虑功能模块的完成. 一 导航架构设计 一款App的导航架构设计应该 ...

  4. 一个node项目的框架搭建流程

    项目服务端编程语言node,前端js,数据库mongodb, 开发工具用webstorm. 使用express应用生成器,生成项目雏形. 安装应用生成器工具,命令是npm install expres ...

  5. MVC+Ef项目(1) 项目的框架搭建

    一:首先我们来搭建最基本的项目框架,这里使用MVC3作为web项目,然后我们添加几个类库项目 最后的项目如下, 其中有一个 YouJiao.MvcWeb.Repository 实际就当做是 DAL层即 ...

  6. AS3项目基础框架搭建分享robotlegs2 + starling1.3 + feathers1.1

    这个框架和我之前使用robotlegs1版本的大体相同,今天要写一个新的聊天软件就把之前的框架升级到了2.0并且把代码整理了一下. 使用适配器模式使得starling的DisplayObject和fl ...

  7. go语言实战教程:实战项目资源导入和项目框架搭建

    从本节内容开始,我们将利用我们所学习的Iris框架的相关知识,进行实战项目开发. 实战项目框架搭建 我们的实战项目是使用Iris框架开发一个关于本地服务平台的后台管理平台.平台中可以管理用户.商品.商 ...

  8. uniapp之uni-starter小程序多端研发框架搭建与项目实践

    随着移动互联网的飞速发展,无数移动APP琳琅满目:在移动App的发展的基础上,衍生了小程序.轻应用技术,它随时可用,但又无需安装卸载.小程序是一种不需要下载安装即可使用的应用,它实现了应用" ...

  9. 凉鞋:我所理解的框架 【Unity 游戏框架搭建】

    前言 架构和框架这些概念听起来很遥远,让很多初学者不明觉厉.会产生"等自己技术牛逼了再去做架构或者搭建框架"这样的想法.在这里笔者可以很肯定地告诉大家,初学者是完全可以去做这些事情 ...

随机推荐

  1. 正则表达式中pw、IDCard和EM匹配

    1密码强度正则 //密码强度正则,最少6位,包括至少1个大写字母,1个小写字母,1个数字,1个特殊字符 var pPattern = /^.*(?=.{6,})(?=.*\d)(?=.*[A-Z])( ...

  2. 详细解析HTML基础结构

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  3. 通用Mapper环境下,mapper接口无法注入问题

    写了一个mapper接口 package com.nyist.mapper; import com.nyist.entity.User; import tk.mybatis.mapper.common ...

  4. 浅谈jQuery的promise

    jquery中的Promise,也就是我们所知道的Deferred对象. 举例1: var data=""; function runAsync(){ var def = $.De ...

  5. MapServer Tutorial——MapServer7.2.1教程学习——第一节用例实践:Example1.1 A map with single layer

    MapServer Tutorial——MapServer7.2.1教程学习——第一节用例实践:Example1.1 A map with single layer 一.前言 开始MapServer用 ...

  6. E: Sub-process /usr/bin/dpkg returned an error code (1)错误解决

    在用apt-get安装软件时出现了类似于install-info: No dir file specified; try --help for more information.dpkg:处理 get ...

  7. Python编程高级特性--迭代器

    一.简单介绍 直接作用于for循环的数据类型有以下几种: 集合数据类型: list 例如:list = ["yuhaohao", "lisheng", &quo ...

  8. GraphHttpClient概述

    博客地址:http://blog.csdn.net/FoxDave 目前这个东西还在预览阶段,所以不推荐在正式生产环境中使用. 我们可以使用Microsoft Graph接口来构建强大的解决方案来访问 ...

  9. nginx——Nginx 处理事件模型

    Nginx 的连接处理机制在不同的操作系统会采用不同的 I/O 模型,要根据不同的系统选择不同的事件处理模型,可供选择的事件处理模型有:kqueue .rtsig .epoll ./dev/poll ...

  10. laravel 解决保存Emoji 表情问题

    ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci; ALTER TABLE table ...