您现在的位置是:网站首页> 编程资料编程资料
Flask项目搭建及部署(最全教程)_python_
2023-05-26
420人已围观
简介 Flask项目搭建及部署(最全教程)_python_
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 中, 模型一般是一个 Python 类, 类中的属性对应数据库中的表.
db.Model :创建模型,
db.Column : 创建模型属性.
tablename :指定表名
模型属性类型 :
| 类型名 | Python类型 | 说明 |
|---|---|---|
| Integer | int | 普通整数,一般是 32 位 |
| SmallInteger | int | 取值范围小的整数,一般是 16 位 |
| Big Integer | int 或 long | 不限制精度的整数 |
| Float | float | 浮点数 |
| Numeric | decimal.Decimal | 定点数 |
| String | str | 变长字符串 |
| Text | str | 变长字符串,对较长或不限长度的字符串做了优化 |
| Unicode | unicode | 变长 Unicode 字符串 |
| Unicode Text | unicode | 变长 Unicode 字符串,对较长或不限长度的字符串做了优化 |
| Boolean | bool | 布尔值 |
| Date | datetime.date | 日期 |
| Time | datetime.time | 时间 |
| DateTime | datetime.datetime | 日期和时间 |
| Interval | datetime.timedelta | 时间间隔 |
| Enum | str | 一组字符串 |
| PickleType | 任何 Python 对象 | 自动使用 Pickle 序列化 |
| LargeBinary | str | 二进制文件 |
常用 SQLAlchemy 列选项
| 选项名 | 说明 |
|---|---|
| primary_key | 如果设为 True,这列就是表的主键 |
| unique | 如果设为 True,这列不允许出现重复的值 |
| index | 如果设为 True,为这列创建索引,提升查询效率 |
| nullable | 如果设为 True,这列允许使用空值;如果设为 False,这列不允许使用空值 |
| default | 为这列定义默认值 |
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 DevelopmentConfig from 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')).al
相关内容
- 基于Python实现打哈欠检测详解_python_
- Python语法学习之线程的创建与常用方法详解_python_
- python下grpc与protobuf的编写使用示例_python_
- python文件操作的基础详细讲解(write、read、readlines、readline)_python_
- Python colorama 彩色打印实现代码_python_
- GitHub AI编程工具copilot在Pycharm的应用_python_
- 简单聊聊Python中的鸭子类型和猴子补丁_python_
- python 包之 re 正则匹配教程分享_python_
- python 包之 Pillow 图像处理教程分享_python_
- Python数据传输黏包问题_python_
点击排行
本栏推荐
