flask的MTV拆分

'''
flask-blueprint的使用

env

python 3.6
sys ubuntu18.0.4
Flask                 1.1.1
flask-blueprint       1.3.0
Flask-Script          2.0.6

安装
pip install flask-script
pip install flask-blueprint

写法和flask-script很相似

目录树
project2
├── app
│   ├── __init__.py
│   ├── models.py
│   └── views.py
└── manage.py



todo # views.py

from flask import Blueprint

# params1 the app name  params2 the import file
blue = Blueprint('blues', __name__)


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


todo# __init__.py

from flask import Flask
from app.views import blue


def creat_app():
    app = Flask(__name__)
    app.register_blueprint(blue)
    return app

todo# manage.py

from flask_script import Manager
from app import creat_app


app = creat_app()
manager = Manager(app)
manager.run()



# todo 二次拆分

project2
├── app
│   ├── __init__.py
│   ├── models.py
│   └── views
│       ├── __init__.py
│       ├── firstblue.py
│       └── secondblue.py
└── manage.py 文件内容不变

# todo app __init__.py

from flask import Flask
from .views import init_view


def creat_app():
    app = Flask(__name__)
    init_view(app)
    return app


todo # views __init__.py

from .firstblue import blue
from .secondblue import second


def init_view(app):
    app.register_blueprint(blue)
    app.register_blueprint(second)


todo view firstblue.py

from flask import Blueprint

# params1 the app name  params2 the import file
blue = Blueprint('blues', __name__)


@blue.route('/1/')
def hello():
    return 'HELLO first blue !'


todo views secondblue.py

from flask import Blueprint


second = Blueprint('second', __name__)

@second.route('/2/')
def hello():
    return 'hello second blue !'



todo tempaltes模板的使用

todo 在app内创建tempaltes文件夹创建home.html文件
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>home</title>
</head>
<body>
    <h1>天气突变,小心感冒</h1>
    <ul>
        <li>起风了</li>
        <li>温度低</li>
        <li>{{ msg }}</li>
    </ul>
</body>
</html>

todo 修改views firstblue.py
from flask import Blueprint, render_template

# params1 the app name  params2 the import file
blue = Blueprint('blues', __name__)


@blue.route('/1/')
def hello():
    return render_template('home.html', msg='我是传递参数')


todo#  ORM关系印象的使用flask-sqlalchemy
安装
pip install flask-sqlalchemy
安装成功提示
Successfully installed SQLAlchemy-1.3.15 flask-sqlalchemy-2.4.1

todo # app models.py

from flask_sqlalchemy import SQLAlchemy

models = SQLAlchemy()

def init_models(app):
    # 懒加载模式接口,先初始化数据在加载app创建数据模型对象
    models.init_app(app)

class User(models.Model):
    id = models.Column(models.Integer, primary_key=True)
    name = models.Column(models.String(16), unique=True, nullable=False)

    def save(self):
        models.session.add(self)
        models.session.commit()

todo # views  firstblue.py

# 创建数据库表
@blue.route('/createdb/')
def createdb():
    models.create_all()
    return 'user表创建成功 !'


@blue.route('/dropdb/')
def dropdb():
    models.drop_all()
    return 'delete database successful !'


# 用户创建
@blue.route('/adduser/')
def adduser():
    user = User()
    user.name = 'tom'
    # 数据库添加数据写法
    # 也可以在models.py文件中class User添加save方法,倒入下面两句话即可!
    # models.session.add(user)
    # models.session.commit()
    user.save()

    return '创建用户成功 !'



todo 数据库的迁移指令

安装
pip install flask-migrate

Successfully installed Mako-1.1.2 alembic-1.4.2 flask-migrate-2.5.3 python-editor-1.0.4




todo flask的三次拆分

── project2
    ├── app
    │   ├── ext.py 插件文件
    │   ├── __init__.py
    │   ├── models.py  数据模型文件
    │   ├── settings.py  环境配置文件
    │   ├── static  静态文件夹
    │   ├── templates  模板文件夹
    │   │   └── home.html
    │   └── views
    │       ├── firstblue.py
    │       ├── __init__.py
    │       └── secondblue.py
    ├── manage.py
    └── migrations  迁移文件夹
        ├── alembic.ini
        ├── env.py
        ├── README
        ├── script.py.mako
        └── versions
            ├── e1198f2086d0_.py

todo ├── app
         ├── ext.py 插件文件

# 插件文件,用于一些插件新信息的写入

# 数据库插件配置,用于数据库的连接创建和操作
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate

# 数据库连接指令
models = SQLAlchemy()
# 数据库迁移指令
migrate = Migrate()



def init_models(app):
    # 懒加载模式接口,先初始化数据在加载app创建数据模型对象
    models.init_app(app)
    # 数据迁移懒加载接口
    migrate.init_app(app, models)


todo
├── app
    ├── models.py  数据模型文件

from .ext import models


class User(models.Model):
    id = models.Column(models.Integer, primary_key=True)
    name = models.Column(models.String(16), unique=True, nullable=False)

    def save(self):
        models.session.add(self)
        models.session.commit()


todo # manage.py
import os

from flask_script import Manager
from flask_migrate import MigrateCommand
from app import creat_app

# 从系统的环境变量中倒入运行模式参数,有则反回系统的,没有返回default
# app中的__init__文件app.config需要参数
os_env = os.environ.get('FLASK_ENV', 'default')
app = creat_app(os_env)
manager = Manager(app)
# manage添加db指令,用于数据库的数据迁移
# 第一次使用需要初始化,其他次数不用
#  python manage.py db init
# 数据库生成迁移文件
#  python manage.py db migrate
# 数据迁移
#  python manage.py db upgrade
#  python manage.py db --help
manager.add_command('db', MigrateCommand)
manager.run()


todo
├── app
    ├── settings.py  环境配置文件

# 配置各种环境需要的参数
import os
# 项目主目录
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

class Config:
    DEBUG = False
    TESTING = False
    SQLALCHEMY_TRACK_MODIFICATIONS = False

    # 数据库连接方法
    @classmethod
    def get_db(cls, info):
        engine = info.get('ENGINE', 'sqlite')
        driver = info.get('DRIVER', '')
        user = info.get('USER', '')
        password = info.get('PASSWORD', '')
        host = info.get('HOST', '')
        port = info.get('PORT', '')
        name = info.get('NAME', 'sqlite.db')

        return '{}+{}://{}:{}@{}:{}/{}'.format(engine, driver, user, password,
                                               host, port, name)


# 开发环境配置,还有测试,演练,生产环境更据需要自己配置。
class DevelopConfig(Config):
    DEBUG = True

    dbinfo = {
        'ENGINE': 'mysql',
        'DRIVER': 'pymysql',
        'USER': 'lql',
        'PASSWORD': 'lql',
        'HOST': 'localhost',
        'PORT': '3306',
        'NAME': 'lql1',
    }

    SQLALCHEMY_DATABASE_URI = Config.get_db(dbinfo)

# 通过env传递环境配置,方便app.config的获取
env = {
    'develop': DevelopConfig,
    'default': DevelopConfig,
}


'''
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

python-newer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值