准备工作:
创建的虚拟环境会自动安装 pip 和 easy_install,接下来可以使用:
pip install flask
pip install flask-script
pip install flask-sqlalchemy
pip install flask-migrate
flask-script 可以自定义命令行命令,用来启动程序或其它任务;flask-sqlalchemy 用来管理数据库的工具,支持多种数据库后台;flask-migrate 是数据库迁移工具,该工具命令集成到 flask-script 中,方便在命令行中进行操作。
app.py:运行主文件
app ——Flask 程序保存在此文件夹中
migrations ——包含数据库迁移脚本(安装了 flask-migrate 后自动生成)
tests ——单元测试放在此文件夹下
venv ——Python 虚拟环境
requirements.txt —— 列出了所有的依赖包,以便于在其他电脑中重新生成相同的环境
创建 requirements.txt 以及启动脚本 manage.py。程序中必须包含一个 requirements.txt 文件,用于记录所有的依赖包和版本号,便于在其它电脑上创建相同的开发环境。直接在终端使用如下命令即可创建 requirements.txt 文件:
pip freeze > requirements.txt
如果要在另一台电脑上创建这个虚拟环境的完全副本,运行以下命令即可:
pip install -r requirements.txt
config.py 存储配置
manage.py 其他任务
蓝本管理路由:
和路由相关联的蓝图都在休眠状态,只有当蓝图在应用中被注册后,此时的路由才会成为它的一部分。使用定义在全局作用域下的蓝图,定义应用程序的路由就几乎可以和单脚本应用程序一样简单了。
蓝图可以定义在一个文件或一个包中与多个模块一起创建更结构化的方式。为了追求最大的灵活性,可以在应用程序包中创建子
# app/controller/ _init__.py:创建蓝图_
from flask import Blueprint, Flask
from flask_sqlalchemy import SQLAlchemy
app_orders =Blueprint('app',__name__)
from . import test2,test1
def create_app(config_name):
#
app = Flask(__name__)
app.config.from_object(config['default'])
db.init_app(app)
#蓝图注册
from .controller import app_orders
app.register_blueprint(app_orders)
return app
数据库ORM:
#libaray init.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from config import config
def getDB():
app = Flask(__name__)
#app.config['SQLALCHEMY_DATABASE_URI'] = config
app.config.from_object(config['default'])
#SQLAlchemy类的对象该对象包含用于ORM操作的辅助函数。它还提供了一个父Model类,使用它来声明用户定义的模型
db = SQLAlchemy(app)
print(db)
return db
#library init.py 返回SQLAlchemy类的对象
from app.library import getDB
db = getDB()
#model COMPANY模型
from . import db
class COMPANY(db.Model):
__tablename__ = 'COMPANY'
id = db.Column('student_id', db.Integer, primary_key=True)
NAME = db.Column(db.String(120))
AGE = db.Column(db.String(50))
ADDRESS = db.Column(db.String(200))
SALARY = db.Column(db.String(10))
def __init__(self, NAME, AGE, ADDRESS, SALARY):
self.NAME = NAME
self.AGE = AGE
self.ADDRESS = ADDRESS
self.SALARY = SALARY
#路由指向及数据库处理
from app.model.Company import COMPANY
from . import app_orders
from ..model import db
# 将路由添加到蓝图里
@app_orders.route('/orders2')
def get_orders1():
return 'test2'
@app_orders.route('/orders3')
def get_orders3():
afile =123;
# afile = request.files.get('pic')
return 'test23%s' %afile
@app_orders.route('/new1', methods=['GET', 'POST'])
def new1():
dstu = COMPANY('gg','33','213','21')
db.session.add(dstu)
db.session.commit()
return 'success'
flask-migrate动态迁移数据库:
import os
from flask_script import Manager,Shell
from app import create_app
from app.model import db
from flask_migrate import Migrate,MigrateCommand
from app.model import Article,Company,Test,table1
app = create_app(os.getenv('FLASK_CONFIG') or 'default')
manager = Manager(app)
# 1. 要使用flask_migrate,必须绑定app和db
migrate = Migrate(app,db)
# 2. 把MigrateCommand命令添加到manager中
manager.add_command('db',MigrateCommand)
def make_shell_context():
return dict(app=app, db=db)
manager.add_command("shell",Shell(make_context=make_shell_context))
if __name__ == '__main__':
manager.run()
python manage.py db init
:这个命令不需要执行,因为已经初始化了迁移脚本的环境,这个命令只执行一次。
python manage.py db migrate
:这个命令需要执行,因为模型改变了。
python manage.py db upgrade
这个命令也需要执行,每次运行了migrate
命令后,就记得要运行这个命令。
注意点:需要将你想要映射到数据库中的模型,都要导入到manage.py
文件中,如果没有导入进去,就不会映射到数据库中。