''' 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, } '''
flask的MTV拆分
最新推荐文章于 2024-03-15 13:57:07 发布