Flask项目拆分

2019-06-10 21:43:20阅读 221评论 0

1.安装

1)创建app的基础包

    pip install flask

2)Manager包

    pip install flask_script

3)blueprint蓝图包

    pip install blueprint

4)orm框架

    pip install flask_sqlalchemy

5)数据库迁移扩展

    pip install flask_migrate

2.拆分思路

3.文件结构

    |-manage.py  
    |-app  
         |-__init__.py  
         |-config.py  
         |-views.py  
         |-ext.py  
         |-models.py

4.文件代码

1)manage.py

    from app import create_app  
    from flask_script import Manager  
    from flask_migrate import MigrateCommand  

    app=create_app()  
    manager=Manager(app)#终端启动参数解析工具  
    manager.add_command('db',MigrateCommand)#终端数据迁移工具  

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

2)__init__.py

    from flask import Flask  
    from app.config import envis  
    from app.views import init_first_blue  
    from app.ext import init_ext  

    def create_app():  
        app=Flask(__name__,template_folder='templates')#创建app,配置template文件夹位置  
        app.config.from_object(envis.get('develop'))#为app加载配置信息  
        init_first_blue(app)#初始化views  
        init_ext(app)#初始化扩展库  
        return app

3)views.py

    from flask import Blueprint  
    from app.ext import db  
    from app.models import Person#如果views中未引用models,db.create_all()将不会在数据库生成表  

    blue=Blueprint('app01',__name__)  

    def init_first_blue(app):  
        app.register_blueprint(blueprint=blue)  

    @blue.route('/')  
    def index():  
        return 'hello'

4)ext.py

    from flask_sqlalchemy import SQLAlchemy  
    from flask_migrate import Migrate  

    db=SQLAlchemy()migrate=Migrate()  

    def init_ext(app):  
        db.init_app(app)#以懒加载方式向app注入db  
        migrate.init_app(app=app,db=db)#以懒加载方式向app注入db+migrate

5)models.py

    from app.ext import db  

    class Person(db.Model):        __tablename__='person'#设置表名称        __table_args__={'mysql_collate':'utf8_general_ci'}#设置字符编码为utf8    id=db.Column(db.Integer,primary_key=True,autoincrement=True)  
        name=db.Column(db.String(10),primary_key=True)  
        email=db.Column(db.String(20),primary_key=True)  
        age=db.Column(db.Integer)

6)config.py

    import os  
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))  

    def get_db_url(database):  
        ENGINE=database['ENGINE']  
        DRIVER=database['DRIVER']  
        USERNAME=database['USERNAME']  
        PASSWORD=database['PASSWORD']  
        HOST=database['HOST']  
        PORT=database['PORT']  
        NAME=database['NAME']  
        return "{}+{}://{}:{}@{}:{}/{}".format(ENGINE,DRIVER,USERNAME,PASSWORD,HOST,PORT,NAME)  

    class config():#通用配置  
        DEBUG=False  
        TESTING=False  
        SECRET_KEY='ABCDE123456'  
        SQLALCHEMY_TRACK_MODIFICATIONS=False  

    class DevelopEviroment(config):  
        DEBUG=True  
        TESTING=True  
        DATABASE={  
            'ENGINE':'mysql',  
            'DRIVER':'pymysql',  
            'USERNAME':'root',  
            'PASSWORD':'',  
            'HOST':'127.0.0.1',  
            'PORT':'3306',  
            'NAME':'test'  
        }  
        SQLALCHEMY_DATABASE_URI=get_db_url(DATABASE)  


    envis={  
        'develop':DevelopEviroment,  
    }

还没有评论,来说两句吧