flask项目:新闻信息网站2蓝图的创建

开发模式

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')

数据库迁移

  1. 在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')
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容