入口文件完整体:
注:在运行的时候,需要将PC上的Redis-server打开,要不然就会报错
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import redis
from flask_session import Session
from flask_wtf import CSRFProtect
app = Flask(__name__)
class Config(object):
"""配置信息"""
SECRET_KEY = 'ASDAXCWE5ERTFG%%DAS34'
# 这个值是什么无所谓,是一种更安全的加密
USERNAME = 'root'
PASSWORD = 'root'
HOSTNAME = '127.0.0.1'
PORT = 3306
DATEBASE = 'home'
# redis配置
REDIS_HOST = '127.0.0.1'
REDIS_PORT = 6379
# flask-session
SESSION_TYPE = 'redis'
SESSION_REDIS = redis.Redis(host=REDIS_HOST, port=REDIS_PORT)
SESSION_USE_SIGNER = True #是否对会话cookie_sid进行签名,如果设置为True,则必须设置secret_key,
PERMANENT_SESSION_LIFETIME = 8640 # 单位是秒 这是一天的时间
# flask-session 配置:https://flask-session.readthedocs.io/en/latest/
# 数据库
DB_URL = 'mysql+pymysql://{}:{}@{}:{}/{}'.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATEBASE)
app.config.from_object(Config)
#app.config.from_object()
# 数据库连接
db = SQLAlchemy(app)
# 创建Redis
# redis缓存 比如短信验证码
redis_store = redis.Redis(host=Config.REDIS_HOST, port=Config.REDIS_PORT)
# redis_2 = redis.StrictRedis()
# session
Session(app)
# post请求 wtf csrf
CSRFProtect(app)
@app.route('/')
def index():
return "index page"
if __name__ == '__main__':
app.run()
- 知识点2:配置文件与配置文件内容加载:通过字典的方式加载字典里的相关类。
config.py
import redis
class Config(object):
"""配置信息"""
SECRET_KEY = 'ASDAXCWE5ERTFG%%DAS34'
# 这个是哪里来的?
USERNAME = 'root'
PASSWORD = 'root'
HOSTNAME = '127.0.0.1'
PORT = 3306
DATEBASE = 'home'
# redis配置
REDIS_HOST = '127.0.0.1'
REDIS_PORT = 6379
# flask-session
SESSION_TYPE = 'redis'
SESSION_REDIS = redis.Redis(host=REDIS_HOST, port=REDIS_PORT)
SESSION_USE_SIGNER = True
PERMANENT_SESSION_LIFETIME = 8640 # 单位是秒
# 数据库
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://{}:{}@{}:{}/{}'.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATEBASE)
SQLALCHEMY_TRACK_MODIFICATIONS = False
# 如果开启的话会增加大量的开销
class DevConfig(Config):
"""开发环境"""
DEBUG = True
HOSTNAME = '127.0.0.2'
class ProConfig(Config):
"""生产环境"""
DEBUG = False
HOSTNAME = '192.168.1.138'
config_map = {
'dev': DevConfig,
'pro': ProConfig
}
加载不同的配置类方式:
通过字典的get方法,可以获取到对应的键值并且赋值,于是就可以获取到了。
from flask import Flask
from config import config_map
def create_app(config_name):
#setup_log()
app = Flask(__name__)
config_class = config_map.get(config_name)
# 字典的get方法,可以通过get方法获取字典中对应的class,这样的方法真的厉害了啊!
print(config_class.HOSTNAME)
create_app('dev')
create_app('pro')
- 拆分程序与各个文件夹:
api_1_0文件夹:蓝图
utils:自己完成的功能块
libs:第三方工具
static:静态资源文件,html js 等等
config文件:接口配置
logs:日志文件
manager:入口文件
在外部新建一个总的文件夹把和入口相关不大的装起来,也就是和业务逻辑相关的都放进去
新建一个lghome文件夹
可以将目录变成包,通过添加一个__init__.py把目录变成包,此时就可以被import了