今天编程学习网为大家讲解Python flask框架搭建及部署云盘,有需要的小伙伴可以参考一下:
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 dbclass 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 中, 模型一般是一个 Python 类, 类中的属性对应数据库中的表.
db.Model :创建模型,
db.Column : 创建模型属性.
tablename :指定表名
模型属性类型 :
常用 SQLAlchemy 列选项
2.3 声明蓝图
app1._init.py
#给app取别名为 'index'index_blu=Blueprint('index',__name__,template_folder='templates',static_folder='static')
from .views import *
template_folder:指定模板文件路径,查找顺序,先全局templates里面找,没找到,再往子蓝图里面找.
这里是把view中所有的视图都声明在index这个蓝图里面,接下来我们需要做的是将这个声明好的蓝图,注册进我们的项目中。
2.4 将声明好的蓝图注册进app中
application.init_:
from application.settings.dev import DevelopmentConfigfrom application.settings.prop import ProductionConfig
# 主应用的根目录
app = Flask(__name__)
config = {
'dev': DevelopmentConfig,
'prop': ProductionConfig,
}
# 设置配置类
Config = config['dev']
# 加载配置
app.config.from_object(Config)
# 创建数据库连接对象
db = SQLAlchemy(app)
# todo 注册蓝图
from .apps.app1 import index_blu
app.register_blueprint(index_blu, url_prefix='/index')
针对:app = Flask(name)解释
Flask类初始化参数
Flask类init方法部分代码
def __init__(self,
import_name,
static_url_path=None,
static_folder="static",
static_host=None,
host_matching=False,
subdomain_matching=False,
template_folder="templates",
instance_path=None,
instance_relative_config=False,
root_path=None,
):pass
import_name:Flask程序所在的包(模块),传 __name__
static_url_path:静态文件访问路径,可以不传,默认为:/ + static_folder
static_folder:静态文件存储的文件夹,可以不传,默认为 static
template_folder:模板文件存储的文件夹,可以不传,默认为 templates
3 通过以上的步骤后,我们可以基本操作数据库了:
以下所有示例代码,皆在view.py中去实现
3.1 增:
先写怎么增,然后增加,最后提交
student = Wdtest(id=ids , name=name, age=age)try:
application.db.session.add(student)
application.db.session.commit()
except:
# 事務回滾
application.db.session.rollback()
3.2 删:
先获取数据库中的这个数据,再删除它
user = Wdtest.query.first()application.db.session.delete(user)
application.db.session.commit()
3.3 改:
user = Wdtest.query.first()
user.name = name
try:
application.db.session.commit()
except:
# 事務回滾
application.db.session.rollback()
3.4 查:
# 查询所有⽤户数据
user_list=Wdtest.query.all()
# 查询有多少个⽤户
user_list_num=Wdtest.query.count()
# 查询第1个⽤户
user=Wdtest.query.first()
# 查询id为3的⽤户[3种⽅式]
user=Wdtest.query.get(3) # 根据主键查询
user_list=Wdtest.query.filter_by(id=3).all() # 以关键字实参形式进行匹配字段
user_list=Wdtest.query.filter(Wdtest.id == 3).all() # 以恒等式形式匹配字段
# 查询名字结尾字符为g的所有⽤户
Wdtest.query.filter(Wdtest.name.endswith('g')).all()
# 查询名字包含‘wa'的所有项目
user_list=Wdtest.query.filter(Wdtest.name.contains('wa')).all()
# 模糊查询
user_list =Wdtest.query.filter(Wdtest.name.like('%a%')).all()
# 查询名字wa开头和age为20的所有⽤户[2种⽅式]
user_list=Wdtest.query.filter(Wdtest.name.startswith('wa'),Wdtest.age == 20).all()
user_list=Wdtest.query.filter(and_(Wdtest.name.startswith('wa'), Wdtest.age == 20)).all()
# 非条件查询查询名字不等于wade的所有⽤户[2种⽅式]
user_list=Wdtest.query.filter(not_(Wdtest.name == 'wade')).all()
user_list=Wdtest.query.filter(Wdtest.name != 'wade').all()
# in 条件查询
user_list=Wdtest.query.filter(Wdtest.id.in_(['97124f50-0208-11ea-a66c-04ea56212bdf', '3'])).all()
# 所有⽤户先按年龄从⼩到⼤, 再按id从⼤到⼩排序, 取前5个
user_list=Wdtest.query.order_by(Wdtest.age,Wdtest.id.desc()).limit(5).all()
# 分⻚查询, 每⻚3个, 查询第2⻚的数据
pn = Wdtest.query.paginate(2,3)
print(pn.pages)
print(pn.page)
print(pn.items)
以上就是“Python flask框架搭建及部署云盘”的详细内容,想要了解更多Python教程欢迎持续关注编程学习网
扫码二维码 获取免费视频学习资料
- 本文固定链接: http://phpxs.com/post/10436/
- 转载请注明:转载必须在正文中标注并保留原文链接
- 扫码: 扫上方二维码获取免费视频资料