开发模式
config.py:
import logging
import redis
class Config(object):
"""工程信息配置"""
SECRET_KEY = "EjpNVSNQTyGi1VvWECj9TvC/+kq3oujee2kTfQUs8yCM6xX9Yjq52v54g+HVoknA"
DEBUG = True
# 导入数据库配置
# 设置数据库连接
SQLALCHEMY_DATABASE_URI= 'mysql://root:root@127.0.0.1:3306/information'
# 动态追踪设置
SQLALCHEMY_TRACK_MODUFICATIONS = True
# 显示原始sql
SQLALCHEMY_ECHO = True
REDIS_HOST = "127.0.0.1"
REDIS_POST = 6379
# flask_session配置信息
SESSION_TYPE = 'redis' #指定session保存到Redis中
SESSION_USE_SIGNER = True #让cookie中的sessionid 被加密处理
# 使用Redis实例
SESSION_REDIS = redis.StrictRedis(host=REDIS_HOST, port=REDIS_POST)
SESSION_PERMANENT = False
PERMANENT_SESSION_LIFETIME = 86400 #session有效期 秒
#日志级别
LEVEL = logging.DEBUG
# 开发环境
class DevelopConfig(Config):
pass
# 生产环境
class ProductConfig(Config):
DEBUG = False
LEVEL = logging.ERROR
# 测试环境
class TestingConfig(Config):
TESTING = True
# 通过统一的字典进行配置类的访问
config_dict = {
"develop":DevelopConfig,
"product":ProductConfig,
"testing":TestingConfig,
}
添加了3个类

__ init__.py:创建了一个create_app类包装
from logging.handlers import RotatingFileHandler
from flask import Flask
from flask_session import Session
from flask_sqlalchemy import SQLAlchemy
import redis
from flask_wtf import CSRFProtect
from config import *
db = SQLAlchemy()
def create_app(config_name):
"""通过传入不同的得配置名,切换不同的环境"""
config = config_dict.get(config_name)
app = Flask(__name__)
app.config.from_object(Config)
# 初始化Redis配置
# redis.StrictRedis(host=Config.REDIS_HOST, port=Config.REDIS_POST)
# 开启csrf保护,只用于服务器验证功能
CSRFProtect(app)
# 设置session保存指定位置
Session(app)
return app
manage.py:初始化create_app
# @File : manage.py 只负责基本的启动工作,
# app 的创建在 info 下的__init__ 中
from flask import session
from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand
from info import create_app, db
app = create_app('develop')
# flask_script
manager = Manager(app)
# 数据库迁移
Migrate(app, db)
manager.add_command('db', MigrateCommand)
@app.route('/')
def index():
session['name'] = 'ssq'
return 'index'
if __name__ == '__main__':
manager.run()

记录日志
__ init__.py:添加了log_file类,
在creat_app中设置日志等级,
在config.py设置日志级别。
# 记录日志
def log_file(level):
# 设置日志的记录等级,常见等级有: DEBUG<INFO<WARING<ERROR
logging.basicConfig(level=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)


最后创建logs文件,运行后进入页面会有日志生成在文件中

蓝图的创建
- 创建蓝图
- 注册蓝图路由
-
注册蓝图到程序实例中
在info下创建moudles包,下在创建index包
在index下的__ init__.py下添加如下代码:创建蓝图
# 创建蓝图
from flask import Blueprint
index_blu = Blueprint('index',__name__)
from . import views
将manage.py中的首页路由函数部分剪切到index下创建的views.朋友下,并导入index_blu,并将app修改
from . import index_blu
@index_blu.route('/')
def index():
return 'index'
最后在info下的__ init__.py中注册蓝图
注册蓝图时,导入注册写在一起
# 注册蓝图时,导入注册写在一起
from info.moudles.index import index_blu
app.register_blueprint(index_blu)

首页
创建static文件并导入资源, 创建templates文件,文件下创建news文件,将static下news中的index.html拖入templates下news中,最后修改views.py
from flask import render_template
from . import index_blu
@index_blu.route('/')
def index():
# return 'index'
return render_template('news/index.html')


数据库迁移

- 在Terminal写入
python manage.py db init
会出现

image.png
2.创建SQLAlchemy对象关联app,再在terminal中输入

python manage.py db migrate -m"initial"
3.在terminal中输入
python manage.py db upgrade

最后添加数据
ico
views.py添加
@index_blu.route('/favicon.ico')
def get_web_logo():
return current_app.send_static_file('news/favicon.ico')

