Flask相关组件及应用

一、flask-sqlalchemy

a. 下载安装
    pip3 install flask-sqlalchemy
b. chun.__init__.py 
    导入并实例化SQLAlchemy
    from flask_sqlalchemy import SQLAlchemy
    db = SQLAlchemy()
    
    注意事项:
         - 必须在导入蓝图之前
         - 必须导入models.py 
c. 初始化
    db.init_app(app)
    
d. 在配置文件中写入配置
    # ##### SQLALchemy配置文件 #####
    SQLALCHEMY_DATABASE_URI = "mysql+pymysql://root:123456@127.0.0.1:3306/s9day122?charset=utf8"
    SQLALCHEMY_POOL_SIZE = 10
    SQLALCHEMY_MAX_OVERFLOW = 5

e. 创建models.py中的类(对应数据库表)
    chun/models.py 
        from sqlalchemy.ext.declarative import declarative_base
        from sqlalchemy import Column
        from sqlalchemy import Integer,String,Text,Date,DateTime
        from sqlalchemy import create_engine
        from chun import db


        class Users(db.Model):
            __tablename__ = 'users'

            id = Column(Integer, primary_key=True)
            name = Column(String(32), index=True, nullable=False)
            depart_id = Column(Integer)

f. 生成表(使用app上下文)
    from chun import db,create_app

    app = create_app()
    app_ctx = app.app_context() # app_ctx = app/g
    with app_ctx: # __enter__,通过LocalStack放入Local中
        db.create_all() # 调用LocalStack放入Local中获取app,再去app中获取配置

        
g. 基于ORM对数据库进行操作。
    from flask import Blueprint
    from chun import db
    from chun import models
    us = Blueprint('us',__name__)


    @us.route('/index')
    def index():
        # 使用SQLAlchemy在数据库中插入一条数据
        # db.session.add(models.Users(name='高件套',depart_id=1))
        # db.session.commit()
        # db.session.remove()
        result = db.session.query(models.Users).all()
        print(result)
        db.session.remove()

        return 'Index'

二、flask-script

安装:
pip3 install flask-script 

功能:
    a. 增加 runserver
        from chun import create_app
        from flask_script import Manager


        app = create_app()
        manager = Manager(app)

        if __name__ == '__main__':
            # app.run()
            manager.run()
            
    b. 位置传参
        from chun import create_app
        from flask_script import Manager


        app = create_app()
        manager = Manager(app)

        @manager.command
        def custom(arg):
            """
            自定义命令
            python manage.py custom 123
            :param arg:
            :return:
            """
            print(arg)


        if __name__ == '__main__':
            # app.run()
            manager.run()
    c. 关键字传参
        from chun import create_app
        from flask_script import Manager


        app = create_app()
        manager = Manager(app)

        @manager.option('-n', '--name', dest='name')
        @manager.option('-u', '--url', dest='url')
        def cmd(name, url):
            """
            自定义命令
            执行: python manage.py  cmd -n wupeiqi -u http://www.oldboyedu.com
            :param name:
            :param url:
            :return:
            """
            print(name, url)


        if __name__ == '__main__':
            # app.run()
            manager.run()

三、flask-migrate

安装:
pip3 install flask-migrate 
依赖:flask-script 

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-

    from sansa import create_app
    from sansa import db

    from flask_script import Manager
    from flask_migrate import Migrate, MigrateCommand

    app = create_app()
    manager = Manager(app)
    Migrate(app, db)

    """
    # 数据库迁移命名
        python manage.py db init
        python manage.py db migrate
        python manage.py db upgrade
    """
    manager.add_command('db', MigrateCommand)


    if __name__ == '__main__':
        manager.run()
        # app.run()

四、找到项目使用的所有组件和版本

安装:
pip install pipreqs

pipreqs ./ --encoding=utf-8  
#在终端中输入这条命令后会产生一个requirements.txt文件,里面包含项目中所需要的全部组件和版本

五、虚拟环境

安装:
pip3 install virtualenv


virtualenv env1  --no-site-packages
#上面命令会初始化一个干净的新的环境,

env1 #进入env1目录
activate  #激活,进入新创建的环境
deactivate

综合应用示例

 models.py

from sqlalchemy import Column
from sqlalchemy import Integer,String
from chun import db


class Users(db.Model):
    __tablename__ = 'users'

    id = Column(Integer, primary_key=True)
    name = Column(String(32), index=True, nullable=False)
    depart_id = Column(Integer)

user.py

from flask import Blueprint
ac = Blueprint('ac',__name__)


@ac.route('/login')
def login():
    return 'Login'

account.py

from flask import Blueprint
from chun import db
from chun import models
us = Blueprint('us',__name__)


@us.route('/index')
def index():
    # 使用SQLAlchemy在数据库中插入一条数据
    # db.session.add(models.Users(name='高件套',depart_id=1)) #调用db.session的时候,内部为每个线程去数据库连接池中获取一个连接
    # db.session.commit()
    # db.session.remove()
    result = db.session.query(models.Users).all()
    print(result)  #[<Users 1>, <Users 2>]
    db.session.remove()

    return 'Index'

__init__.py

from flask import Flask
from flask_session import Session

# 第一步:导入并实例化SQLAlchemy
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy() #创建了SQLAlchemy要用到的所有的东西,但缺少数据库的连接
#db相当于全部变量必须在导入蓝图的砂上面
#因为蓝图要操作数据必须得先导入db

from .views.account import ac
from .views.user import us

from .models import *
#必须要导入model,不然找不到模块就生成不了表

def create_app():
    app = Flask(__name__)
    app.config.from_object('settings.ProConfig')

    app.register_blueprint(ac)
    app.register_blueprint(us)

    # Flask-Session: 第一步实例化Session
    # Session(app)

    # 第三步:依赖app中的配置文件
    db.init_app(app) #去app里面读配置文件

    return app

settings.py

from redis import Redis

class BaseConfig(object):
    # Flask-Session: 第二步设置相应的配置
    # SESSION_TYPE = 'redis'
    # SESSION_REDIS = Redis(host='192.168.0.94', port='6379')

    # ##### SQLALchemy配置文件 #####
    SQLALCHEMY_DATABASE_URI = "mysql+pymysql://root:2180736@127.0.0.1:3306/s9day122?charset=utf8"
    SQLALCHEMY_POOL_SIZE = 10
    SQLALCHEMY_MAX_OVERFLOW = 5

    SQLALCHEMY_TRACK_MODIFICATIONS = False

    pass


class ProConfig(BaseConfig):
    pass

create_table.py

from chun import db,create_app

app = create_app()
app_ctx = app.app_context() # app_ctx = app/g
with app_ctx: # 执行app_ctx里面的__enter__方法,通过LocalStack放入Local中
    db.create_all() # 调用LocalStack去Local中获取app,再去app中获取配置

manage.py

from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand
from chun import create_app
from chun import db

app = create_app()
manager = Manager(app)
Migrate(app, db)
"""
# 数据库迁移命名
    python manage.py db init
    python manage.py db migrate # makemirations
    python manage.py db upgrade # migrate
"""
manager.add_command('db', MigrateCommand)

@manager.command
def custom(arg):
    """
    自定义命令
    python manage.py custom 123
    :param arg:
    :return:
    """
    print(arg)

@manager.option('-n', '--name', dest='name')
@manager.option('-u', '--url', dest='url')
def cmd(name, url):
    """
    自定义命令
    执行: python manage.py  cmd -n wupeiqi -u http://www.oldboyedu.com
    :param name:
    :param url:
    :return:
    """
    print(name, url)


if __name__ == '__main__':
    # app.run()
    manager.run()
原文地址:https://www.cnblogs.com/zh-xiaoyuan/p/13275594.html