蓝图
我曾经想过用一片文章去介绍蓝图,但是反而越讲越复杂。我对于蓝图的理解就是认为蓝图所起的作用就是“分而治之”,它是 Flask 程序的模块化处理机制。一个大型的应用不可能再像之前我们这样,只是几个视图函数在以一个 app.py
中,而是有成千上百个路由则对应着成千上百的视图函数,蓝图的作用就是可以将众多的视图函数按照一定的规则进行切割,方便后期维护。
而对于蓝图的使用方法及其逻辑两步即可说完:
- 创建蓝图
- 注册蓝图
在第二步加粗的原因是,很多初学者创建蓝图就完事了,但是并没有和自己的项目创建关联,从而一 Debug 就 404 NOT FOUND
。具体不再细说,下面几篇文章对于蓝图的介绍与使用都是相当不错的,可以参考!
项目初建笔记
不提供参考,只是个人创建项目初期基本框架。
- 新建 Flask 项目
- 创建
settings.py
class Config:
DEBUG = True
# mysql+pymysql://user:password@hostip:port/database_name 配置数据库格式
SQLALCHEMY_TRACK_MODIFICATIONS = True
SQLALCHEMY_ECHO = True
class DevelopmentConfig(Config):
ENV = 'development'
class ProductionConfig(Config):
ENV = 'production'
DEBUG = True
app.py
中进行修改
from flask import Flask
from flask_migrate import Migrate, MigrateCommand
from flask_script import Manager
from apps.user.models import User
from apps import create_app
from exts import db
app = create_app()
manager = Manager(app=app)
migrate = Migrate(app=app,db=db)
manager.add_command('db', MigrateCommand)
# 下面这句话可以打印出路由,方便在 模板文件中使用 url_for 确定名字,比如 user.register
print(app.url_map)
if __name__ == '__main__':
manager.run()
- 在主目录下构建包文件: apps,并在其自动生成的
_init_.py
文件中对上面的create_app()
进行封装
from flask import Flask
from apps.user.view import user_bp
from exts import db
from settings import DevelopmentConfig
def create_app():
app = Flask(__name__,template_folder='../templates',static_folder='../static')
app.config.from_object(DevelopmentConfig)
# 初始化 db
db.init_app(app=app)
# 注册蓝图
app.register_blueprint(user_bp)
return app
- 在主目录下创建第三方扩展包 exts 包,在其
_init_.py
中创建 db 对象。并在/apps/_init_.py
创建关联。
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
在 apps 包下创建 user 包,article 包;在 user 包下创建
view.py
,models.py
models.py
创建 User 类(即创建数据库表)并继承模型类;写完模型记得在app.py
导入 User 类
from datetime import datetime
from exts import db
class User(db.Model):
id = db.Column(db.Integer, primary_key=True,autoincrement=True)
username = db.Column(db.String(15),nullable=False)
password = db.Column(db.String(64),nullable=False)
phone = db.Column(db.String(11),unique=True)
isdelete = db.Column(db.Boolean,default=False)
rdatetime = db.Column(db.DateTime,default=datetime.now)
def __str__(self):
return self.username
三个命令初始化创建表并进行迁移同步
python app.py db init
| (整个项目进行一次就行(创建了一个 migration 文件夹))python app.py db migrate
| 生成版本文件python app.py db upgrade
| 迁移同步这样数据库就有刚才创建的 user 表。
在
apps/user/view.py
创建蓝图并且进行蓝图注册
from flask import Blueprint, render_template, request, url_for, redirect
user_bp = Blueprint('user', __name__)
- 接下来就是自定义操作;另外在 templates 文件夹中也可以创建一个 user 文件夹,而相对于的模板文件可以放里面,这里就需要注意以后在试图函数引入模板文件的时候就要写
'user/xxx.html'
。
此时项目整体架构如下: