flask搭建及部署
pip 19.2.3
python 3.7.5
Flask 1.1.1
Flask-SQLAlchemy 2.4.1
Pika 1.1.0
Redis 3.3.11
flask-wtf 0.14.2
1、创建flask项目:
创建完成后整个项目结构树:
app.py: 项⽬管理⽂件,通过它管理项⽬。
static: 存放静态文件
templates文件夹:用于放置html模板文件
由于flask属于轻量级web框架, 更加自由、灵活,可扩展性强,第三方库的选择面广,开发时可以结合自己最喜欢用的轮子,也能结合最流行最强大的Python库 。所以这个框架的代码架构需要自己设计。
2、创建项目主要逻辑代码保存目录
手动创建application目录、filter目录及其子目录
application : 项目主要逻辑代码保存目录
_init_.py : 创建flask应用并加载配置,如mysql,redis,rabbitmq,
apps : 专门用于保存每一个项目的蓝图
app1 : app1蓝图目录,在app1下的init_.py中文件中创建蓝图对象,view.py中新增对应的视图文件,在 model.py中写模型代码
settings : 项目配置存储目录
dev.py : 项目开发阶段配置文件
prop.py : 项目生成阶段配置文件
static : 项目静态文件夹(用于存放css一类的文件)
templates : 用于放置html模板文件
filter : 整个项目拦截器目录
requestFilter.py: 针对整个app项目全局路由拦截规则定义
app.py : 项⽬管理⽂件,通过它启动整个项目
2.1 配置mysql数据库,加载配置文件并针对整个app项目定义全局db
2.1.1 settings.py
#全局通用配置类 class Config(object): """项目配置核心类""" #调试模式 DEBUG=False # 配置日志 # LOG_LEVEL = "DEBUG" LOG_LEVEL = "INFO" # 配置redis # 项目上线以后,这个地址就会被替换成真实IP地址,mysql也是 REDIS_HOST = 'your host' REDIS_PORT = your port REDIS_PASSWORD = 'your password' REDIS_POLL = 10 #数据库连接格式 SQLALCHEMY_DATABASE_URI = "mysql+pymysql://user:password@localhost:3306/test?charset=utf8" # 动态追踪修改设置,如未设置只会提示警告 SQLALCHEMY_TRACK_MODIFICATIONS = False # 查询时会显示原始SQL语句 SQLALCHEMY_ECHO = False # 数据库连接池的大小 SQLALCHEMY_POOL_SIZE=10 #指定数据库连接池的超时时间 SQLALCHEMY_POOL_TIMEOUT=10 # 控制在连接池达到最大值后可以创建的连接数。当这些额外的 连接回收到连接池后将会被断开和抛弃。 SQLALCHEMY_MAX_OVERFLOW=2 #rabbitmq参数配置 RABBITUSER="user" RABBITPASSWORD="password" RABBITHOST="your ip" RABBITPORT=your port
2.1.2 dev.py
from . import Config class DevelopmentConfig(Config): '开发模式下的配置' # 查询时会显示原始SQL语句 SQLALCHEMY_ECHO = True
2.1.3 prop.py
from . import Config class ProductionConfig(Config): """生产模式下的配置""" DEBUG = False
2.1.4 加载配置文件,定义全局的db( SQLALchemy类的实例 )供项目使用
# 主应用的根目录 app = Flask(__name__) config = { 'dev': DevelopmentConfig, 'prop': ProductionConfig, } # 设置配置类 Config = config['dev'] # 加载配置 app.config.from_object(Config) # 创建数据库连接对象 db = SQLAlchemy(app)
dev : 测试环境配置
prop: 生产环境配置
Flask应用app配置加载
通常三种方式
-
从配置对象中加载:app.config.from_object()
-
从配置文件中加载:app.config.from_pyfile()-ini文件
-
从环境变量中加载:app.config.from_envvar()
配置对象
-
从配置对象中加载,创建配置的类:
# 配置对象,里面定义需要给 APP 添加的一系列配置 class Config(object): DEBUG = True app = Flask(__name__) # 从配置对象中加载配置 app.config.from_object(Config) app.run()
配置文件
-
从配置文件中加载,在目录中定义一个配置文件config.ini
app = Flask(__name__) # 从配置对象中加载配置 app.config.from_pyfile("config.ini") app.run()
环境变量
app = Flask(__name__) # 从环境变量中加载 app.config.from_envvar("FLASKCONFIG") app.run()
2.2 定义model模型,负责和数据库交互
app1.model
from application import db class Wdtest(db.Model): __tablename__ = "wdtest" #设置表名 id = db.Column(db.String(100), primary_key=True, comment="主键ID") name = db.Column(db.String(20), index=True, comment="姓名" ) age = db.Column(db.Integer, default=True, comment="年龄")
模型 表示程序使用的持久化实体. 在Flask-SQLALchemy