1. 蓝图 Flask的蓝图(Blueprints)是一种组织Flask应用程序结构的方法,特别是当应用程序变得越来越大时。蓝图可以简单地理解为应用程序的子模块,它可以具有自己的视图、静态文件、模板等。
from flask import Blueprintsimple_page = Blueprint('simple_page' , __name__) @simple_page.route('/index' ) def index (): return "Hello, World!"
from flask import Flaskfrom yourmodule import simple_page app = Flask(__name__) app.register_blueprint(simple_page)
当访问 /index 时,Flask 将会调用 simple_page.index 视图函数。
迁移数据库 使用flask_orm对数据库进行迁移
实例化 新建ext.py文件,并且在该文件实例化flask_sqlalchemy
""" @File : exts.py """ from flask_sqlalchemy import SQLAlchemydb = SQLAlchemy() session = db.session
定义模型 在Model文件夹下新建表模型文件,一个类对应数据库中的一个表
一个Python文件里可以有多个类(数据库表)
from exts import dbclass Solutions (db.Model): """ 解决方案模型 """ __tablename__ = 'solutions' solution_id = db.Column(db.String(20 ), primary_key=True , comment='解决方案ID' ) solution_name = db.Column(db.String(50 ), comment='解决方案名称' ) solution_desc = db.Column(db.String(200 ), comment='解决方案描述' ) create_time = db.Column(db.DateTime, comment='创建时间' )
迁移脚本 新建 manage.py 文件,在里面编写 orm 数据库迁移脚本
将刚刚定义的数据库表模型导入到该文件中
可以采用 from ... import * 的方式将改文件中的所有类都引入
""" @File : manage.py """ from flask_migrate import Migratefrom apps import create_appfrom apps.models.solution_models import *from exts import dbapp = create_app() Migrate(app, db)
迁移命令
命令
描述
flask db init
初始化迁移环境
flask db migrate
创建迁移脚本
flask db upgrade
应用迁移到数据库
flask db downgrade
回滚迁移
flask db current
查看当前数据库版本
flask db history
查看迁移历史
flask默认的迁移脚本名称是app.py,如果额外定义其他名称的脚本文件,如上面的例子manage.py,则需要使用–app参数指定
如:flask --app manage.py db init
流程图 flowchart TD A[首次迁移] --> B[安装依赖] B --> C["flask db init<br>(初始化迁移环境)"] C --> D["定义模型类<br>(User, Post等)"] D --> E["flask db migrate -m 'initial migration'<br>(生成迁移脚本)"] E --> F["flask db upgrade<br>(应用迁移到数据库)"] G[修改表结构] --> H["修改模型类<br>(添加/删除字段等)"] H --> I["flask db migrate -m 'add column'<br>(生成新迁移脚本)"] I --> J["flask db upgrade<br>(应用新迁移)"] style A fill:#f9f,stroke:#333 style G fill:#9f9,stroke:#333
定时任务
关键词:flask定时任务
参考:Flask-APScheduler详细配置使用(附带API调用) - 个人文章 - SegmentFault 思否
Flask解决80版本Chrome的Session问题 chrome 80 版本之后,谷歌把cookie的SameSite属性,从None改成了Lax,默认拦截SameSite=Lax所以我们需要把SameSite属性改为None
因此需要Flask的配置中加上如下内容
from flask import Flask, session, request, jsonifyfrom flask_cors import * app = Flask(__name__) CORS(app, supports_credentials=True ) app.config['SESSION_COOKIE_SAMESITE' ] = "None" app.config['SESSION_COOKIE_SECURE' ] = True
flask实现高并发
关键词:gunicorn、高并发
参考:【flask】适合生产环境的高并发部署方案(gunicorn + gevent + supervisor)_gunicorn gevent-CSDN博客
Linux 使用gunicorn启动flask实现高并发
gunicorn配置文件guni.py
from gevent import monkeymonkey.patch_all() import multiprocessingdebug = True loglevel = 'debug' bind = '127.0.0.1:8001' pidfile = '/www/poshast/code/poshast/logs/gunicorn.pid' logfile = '/www/poshast/code/poshast/logs/debug.log' workers = multiprocessing.cpu_count() * 2 + 1 worker_class = 'gevent'
启动命令
gunicorn -c guni.py run:app
run是当前项目目录下的run.py,app是run文件里的flask实例
Windows 使用waitress包裹Flask服务
from waitress import serve... if __name__ == '__main__' : serve(app, host='0.0.0.0' , port=8001 , threads=4 )