您现在的位置是:网站首页> 编程资料编程资料

Flask项目搭建及部署(最全教程)_python_

2023-05-26 421人已围观

简介 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类型说明
Integerint普通整数,一般是 32 位
SmallIntegerint取值范围小的整数,一般是 16 位
Big Integerint 或 long不限制精度的整数
Floatfloat浮点数
Numericdecimal.Decimal定点数
Stringstr变长字符串
Textstr变长字符串,对较长或不限长度的字符串做了优化
Unicodeunicode变长 Unicode 字符串
Unicode Textunicode变长 Unicode 字符串,对较长或不限长度的字符串做了优化
Booleanbool布尔值
Datedatetime.date日期
Timedatetime.time时间
DateTimedatetime.datetime日期和时间
Intervaldatetime.timedelta时间间隔
Enumstr一组字符串
PickleType任何 Python 对象自动使用 Pickle 序列化
LargeBinarystr二进制文件

常用 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
                
                

-六神源码网