1 项目初始化配置
项目目录构建
创建一个home的目录,在其目录下有 :
ihome的包,在其内部有
api_1_0的包,在其内部有
index.py的文件
logs目录
config.py文件
manage.py的文件
对以上的目录和 文件的简要的说明:
manage.py文件:
主要管理程序的启动,以及db的操作
ihome/__init__文件
管理flask中app,db,csrf保护,redis,session等的创建
api_1_0的包
主要实现一些接口
config.py
管理配置参数的,最后会传递给home/__init__中创建的一些配置
logs目录
主要记录一些日志的信息
主要思路分析:
首先在ihome/__init__中实现能够创建所有配置的参数,代码如下:
# coding:utf8 from flask import Flask from flask_sqlalchemy import SQLAlchemy from flask_wtf.csrf import CSRFProtect from flask_session import Session from config import config_dict import redis import logging from logging.handlers import RotatingFileHandler # 为了外界调用, 需要先定义db, 但是不能初始化, 延迟加载(app创建后, 调用init加载) db = SQLAlchemy() # 定义CSRF对象 csrf = CSRFProtect() # 定义redis_store对象, 先设置为None redis_store = None logging.basicConfig(level=logging.WARN) # 调试debug级 # 创建日志记录器,指明日志保存的路径、每个日志文件的最大大小、保存的日志文件个数上限 file_log_handler = RotatingFileHandler("logs/logs", 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): app = Flask(__name__) config = config_dict[config_name] app.config.from_object(config) db.init_app(app) csrf.init_app(app) Session(app) global redis_store redis_store = redis.StrictRedis(host=config.REDIS_HOST,port=config.REDIS_PORT,db=config.DB) from ihome.api_1_0 import api app.register_blueprint(api, url_prefix='/api/v1_0') return app
然后在coging.py中为上面的创建的实例,增加配置信息,代码如下:
# coding:utf8 import redis class Config(object): # 配置数据库的参数 SQLALCHEMY_DATABASE_URI = "mysql://root:mysql@127.0.0.1/ihome13" # 数据库 SQLALCHEMY_TRACK_MODIFICATIONS = True # 追踪数据库的修改行为,如果不设置会报警告,不影响代码的执行 # 配置session存储到redis中 SECRET_KEY = 'jlhqsDJKREWASDFGJKLNSALFJKLHNSLJFKHGNLMSW' # 配置redis的数据 REDIS_HOST = '127.0.0.1' REDIS_PORT = 6379 DB = 1 # 配置session存储到redis中 PERMANENT_SESSION_LIFETIME = 86400 # 单位是秒, 设置session过期的时间 SESSION_TYPE = 'redis' # 指定存储session的位置为redis SESSION_USE_SIGNER = True # 对数据进行签名加密, 提高安全性 SESSION_REDIS = redis.StrictRedis(host=REDIS_HOST, port=REDIS_PORT) # 设置redis的ip和端口 class DevelopmentConfig(Config): DEBUG = True class ProductionConfig(Config): pass config_dict = { 'development': DevelopmentConfig, 'production': ProductionConfig }
在api_I_0/__init__.py文件中,创建蓝图 代码如下:
from flask import Blueprint api = Blueprint('api_1_0', __name__) from index import index
在api_1_0/index.py文件中,实现一些接口,代码如下:
# coding:utf8 from . import api from ihome import db import logging @api.route('/index') def index(): try: 10/0 except Exception as e: logging.error(e) return 'index hello buleprint db 没有问题了'
运行项目
python manage.py runserver
在浏览器中输入:
http://127.0.0.1:5000/api/v1_0/index
错误的信息会写到logs/log中
csrf保护机制

前后端 分离优缺点分析


浙公网安备 33010602011771号