Flask是一个使用 Python 编写的轻量级 Web 应用框架。
Flask中的蓝图旨在针对这些情况:
- 把一个应用分解成一系列的蓝图。对于大型的应用是理想化的;一个项目能实例化一个应用, 初始化一些扩展,以及注册一系列的蓝图。
- 以一个 URL 前缀和/或子域在一个应用上注册蓝图。 URL 前缀/子域名中的参数即成为这个蓝图下的所有视图函数的共同的视图参数(默认情况下)。
- 在一个应用中用不同的 URL 规则多次注册一个蓝图。
- 通过蓝图提供模板过滤器、静态文件、模板和其它功能。一个蓝图不一定要实现应用或视图函数。
- 初始化一个 Flask 扩展时,在这些情况中注册蓝图。
项目结构图
配置文件 config.py
import os
class Config:
DEBUG = False # debug模式关闭
SQLALCHEMY_DATABASE_URI = "sqlite:Project/FlaskProject/CompanyProject/flask.db" # 数据库文件存放位置
SQLALCHEMY_TRACK_MODIFICATIONS = True # 数据库改变后自动更新
SECRET_KEY = os.environ.get("SECRET_KEY") or "hard to guess string" # 获取环境变量作为密钥
@staticmethod
def init_app(app):
pass
class Test(Config):
DEBUG = True
SQLALCHEMY_DATABASE_URI = "sqlite:Project/FlaskProject/CompanyProject/flask.db"
class Run(Config):
DEBUG = False
config = {
"test":Test,
"run":Run
}
初始化文件 app/__init__.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from config import config
db = SQLAlchemy() # 实例化数据库
# 创建app
def create_app(config_name):
app = Flask(__name__)
app.config.from_object(config[config_name])
config[config_name].init_app(app)
from .main import main as main_blueprint
app.register_blueprint(main_blueprint)
db.init_app(app)
return app
引入蓝图 app/main/__init__.py
from flask import Blueprint
main = Blueprint("main",__name__)
from . import views,errors
视图编写 app/main/views.py
from . import main
@main.route("/")
def index():
return "hello world"
数据库模型 app/models.py
from app import db
class User(db.Model):
id = db.Column(db.Integer,primary_key=True)
name = db.Column(db.String(32))
class Type(db.Model):
id = db.Column(db.Integer,primary_key=True)
label = db.Column(db.String(32))
启动脚本 manage.py
import os
from app import create_app,db
from app.models import User,Type
from flask_script import Manager,Shell
from flask_migrate import MigrateCommand,Migrate
app = create_app(os.getenv("FLASK_CONFIG") or "test")
manager = Manager(app)
migrate = Migrate(app,db)
def make_shell_context():
return dict(app = app, db = db, User = User ,Type =Type)
def create_db():
db.create_all()
manager.add_command("shell",Shell(make_context=make_shell_context))
manager.add_command("db",MigrateCommand)
if __name__ == '__main__':
manager.run()
执行命令:
1、python manage.py runserver 启动服务
2、Python manage.py db init 实例化数据库
3、Python manage.py db migrate -m "initial migration" 生成数据库语句
4、Python manage.py db upgrade 同步数据库
5、Python manage.py shell 交互命令