返回顶部

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
View Code

 

然后在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
}
View Code

 

在api_I_0/__init__.py文件中,创建蓝图 代码如下:

from flask import Blueprint

api = Blueprint('api_1_0', __name__)

from index import index
View Code

 

在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 没有问题了'
View Code

运行项目

python manage.py runserver

 

在浏览器中输入:

http://127.0.0.1:5000/api/v1_0/index

 

错误的信息会写到logs/log中

 

csrf保护机制 

 前后端 分离优缺点分析

 

posted @ 2017-11-29 20:40  Crazymagic  阅读(149)  评论(0)    收藏  举报