Flask--(项目准备)--框架搭建,配置文件抽取,业务逻辑抽取
抽取配置文件:
- import logging
- from redis import StrictRedis
- class Config(object):
- """项目的配置"""
- SECRET_KEY = "iECgbYWReMNxkRprrzMo5KAQYnb2UeZ3bwvReTSt+VSESW0OB8zbglT+6rEcDW9X"
- # 为数据库添加配置
- SQLALCHEMY_DATABASE_URI = "mysql://root:mysql@127.0.0.1:3306/information27"
- SQLALCHEMY_TRACK_MODIFICATIONS = False
- # Redis的配置
- REDIS_HOST = "127.0.0.1"
- REDIS_PORT = 6379
- # Session保存配置
- SESSION_TYPE = "redis"
- # 开启session签名
- SESSION_USE_SIGNER = True
- # 指定 Session 保存的 redis
- SESSION_REDIS = StrictRedis(host=REDIS_HOST, port=REDIS_PORT)
- # 设置需要过期
- SESSION_PERMANENT = False
- # 设置过期时间
- PERMANENT_SESSION_LIFETIME = 86400 * 2
- # 设置日志等级
- LOG_LEVEL = logging.DEBUG
- class DevelopmentConfig(Config):
- """开发环境下的配置"""
- DEBUG = True
- class ProductionConfig(Config):
- """生产环境下的配置"""
- DEBUG = False
- LOG_LEVEL = logging.WARNING
- class TestingConfig(Config):
- """单元测试环境下的配置"""
- DEBUG = True
- TESTING = True
- config = {
- "development": DevelopmentConfig,
- "production": ProductionConfig,
- "testing": TestingConfig
- }
抽取业务逻辑,创建app
- import logging
- from logging.handlers import RotatingFileHandler
- from flask import Flask
- # 可以用来指定 session 保存的位置
- from flask.ext.session import Session
- from flask.ext.sqlalchemy import SQLAlchemy
- from flask.ext.wtf import CSRFProtect
- from redis import StrictRedis
- from config import config
- # 初始化数据库
- # 在Flask很多扩展里面都可以先初始化扩展的对象,然后再去调用 init_app 方法去初始化
- db = SQLAlchemy()
- # https://www.cnblogs.com/xieqiankun/p/type_hints_in_python3.html
- redis_store = None # type: StrictRedis
- # redis_store: StrictRedis = None
- def setup_log(config_name):
- # 设置日志的记录等级
- logging.basicConfig(level=config[config_name].LOG_LEVEL) # 调试debug级
- # 创建日志记录器,指明日志保存的路径、每个日志文件的最大大小、保存的日志文件个数上限
- file_log_handler = RotatingFileHandler("logs/log", maxBytes=1024 * 1024 * 100, backupCount=10)
- # 创建日志记录的格式 日志等级 输入日志信息的文件名 行数 日志信息
- formatter = logging.Formatter('%(levelname)s %(filename)s:%(lineno)d %(message)s')
- # 为刚创建的日志记录器设置日志记录格式
- file_log_handler.setFormatter(formatter)
- # 为全局的日志工具对象(flask app使用的)添加日志记录器
- logging.getLogger().addHandler(file_log_handler)
- def create_app(config_name):
- # 配置日志,并且传入配置名字,以便能获取到指定配置所对应的日志等级
- setup_log(config_name)
- # 创建Flask对象
- app = Flask(__name__)
- # 加载配置
- app.config.from_object(config[config_name])
- # 通过app初始化
- db.init_app(app)
- # 初始化 redis 存储对象
- global redis_store
- redis_store = StrictRedis(host=config[config_name].REDIS_HOST, port=config[config_name].REDIS_PORT)
- # 开启当前项目 CSRF 保护,只做服务器验证功能
- CSRFProtect(app)
- # 设置session保存指定位置
- Session(app)
- # 注册蓝图
- from info.modules.index import index_blu
- app.register_blueprint(index_blu)
- return app
保留入口文件:
- from flask_script import Manager
- from flask_migrate import Migrate, MigrateCommand
- from info import create_app, db, models
- # manage.py是程序启动的入口,只关心启动的相关参数以及内容,不关心具体该
- # 如果创建app或者相关业务逻辑
- # 通过指定的配置名字创建对应配置的app
- # create_app 就类似于工厂方法
- app = create_app('development')
- manager = Manager(app)
- # 将 app 与 db 关联
- Migrate(app, db)
- # 将迁移命令添加到manager中
- manager.add_command('db', MigrateCommand)
- if __name__ == '__main__':
- manager.run()
Flask--(项目准备)--框架搭建,配置文件抽取,业务逻辑抽取的更多相关文章
- 发现 一个业务管理系统 解决了 orm 和 前端框架 剩下的 是 业务逻辑 了 。 哈
解决了 orm 和 前端框架 剩下的 是 业务逻辑 了 . 哈 还有 各种 aop 组件 呢 . 大家 high 来 准备 用 fluent data 和 mysql 写一个 wcf 的 接口呢. ...
- flask 项目基本框架的搭建
综合案例:学生成绩管理项目搭建 一 新建项目目录students,并创建虚拟环境 mkvirtualenv students 二 安装开发中使用的依赖模块 pip install flask==0.1 ...
- iOS项目——基本框架搭建
项目开发过程中,在完成iOS项目——项目开发环境搭建之后,我们首先需要考虑的就是我们的项目的整体框架与导航架构设计,然后在这个基础上考虑功能模块的完成. 一 导航架构设计 一款App的导航架构设计应该 ...
- 一个node项目的框架搭建流程
项目服务端编程语言node,前端js,数据库mongodb, 开发工具用webstorm. 使用express应用生成器,生成项目雏形. 安装应用生成器工具,命令是npm install expres ...
- MVC+Ef项目(1) 项目的框架搭建
一:首先我们来搭建最基本的项目框架,这里使用MVC3作为web项目,然后我们添加几个类库项目 最后的项目如下, 其中有一个 YouJiao.MvcWeb.Repository 实际就当做是 DAL层即 ...
- AS3项目基础框架搭建分享robotlegs2 + starling1.3 + feathers1.1
这个框架和我之前使用robotlegs1版本的大体相同,今天要写一个新的聊天软件就把之前的框架升级到了2.0并且把代码整理了一下. 使用适配器模式使得starling的DisplayObject和fl ...
- go语言实战教程:实战项目资源导入和项目框架搭建
从本节内容开始,我们将利用我们所学习的Iris框架的相关知识,进行实战项目开发. 实战项目框架搭建 我们的实战项目是使用Iris框架开发一个关于本地服务平台的后台管理平台.平台中可以管理用户.商品.商 ...
- uniapp之uni-starter小程序多端研发框架搭建与项目实践
随着移动互联网的飞速发展,无数移动APP琳琅满目:在移动App的发展的基础上,衍生了小程序.轻应用技术,它随时可用,但又无需安装卸载.小程序是一种不需要下载安装即可使用的应用,它实现了应用" ...
- 凉鞋:我所理解的框架 【Unity 游戏框架搭建】
前言 架构和框架这些概念听起来很遥远,让很多初学者不明觉厉.会产生"等自己技术牛逼了再去做架构或者搭建框架"这样的想法.在这里笔者可以很肯定地告诉大家,初学者是完全可以去做这些事情 ...
随机推荐
- 正则表达式中pw、IDCard和EM匹配
1密码强度正则 //密码强度正则,最少6位,包括至少1个大写字母,1个小写字母,1个数字,1个特殊字符 var pPattern = /^.*(?=.{6,})(?=.*\d)(?=.*[A-Z])( ...
- 详细解析HTML基础结构
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 通用Mapper环境下,mapper接口无法注入问题
写了一个mapper接口 package com.nyist.mapper; import com.nyist.entity.User; import tk.mybatis.mapper.common ...
- 浅谈jQuery的promise
jquery中的Promise,也就是我们所知道的Deferred对象. 举例1: var data=""; function runAsync(){ var def = $.De ...
- 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用 ...
- 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 ...
- Python编程高级特性--迭代器
一.简单介绍 直接作用于for循环的数据类型有以下几种: 集合数据类型: list 例如:list = ["yuhaohao", "lisheng", &quo ...
- GraphHttpClient概述
博客地址:http://blog.csdn.net/FoxDave 目前这个东西还在预览阶段,所以不推荐在正式生产环境中使用. 我们可以使用Microsoft Graph接口来构建强大的解决方案来访问 ...
- nginx——Nginx 处理事件模型
Nginx 的连接处理机制在不同的操作系统会采用不同的 I/O 模型,要根据不同的系统选择不同的事件处理模型,可供选择的事件处理模型有:kqueue .rtsig .epoll ./dev/poll ...
- laravel 解决保存Emoji 表情问题
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci; ALTER TABLE table ...