首页 > 其他 > 详细

Flask拆分/结藕

时间:2021-02-17 10:38:38      阅读:29      评论:0      收藏:0      [点我收藏+]

 

项目结构

  • manage.py 项目管理文件
  • App 目录
    • __init__.py 初始化文件
    • settings.py 全局配置文件
    • extends.py 扩展库,用户扩展项目插件
    • views.py 路由,视图函数
    • models.py 定制模型
 
技术分享图片

 

 

manage.py

import os
 
from flask_script import Manager
from flask_migrate import MigrateCommand
 
from App import create_app
 
# 环境变量,获取当前Flask环境
env = os.environ.setdefault(FLASK_ENV,devlop)
 
# 生成app
app = create_app(env)
manager = Manager(app)
 
# 给manage.py 添加数据库迁移的命令
manager.add_command(db,MigrateCommand)
 
if __name__ == __main__:
    manager.run()

 

App/__init__.py

from flask import Flask
 
# 初始化app,并返回
from App.settings import envs
from App.extends import init_extends
from App.views import init_views
 
 
def create_app(env):
    # 创建Flask的app对象
    app = Flask(__name__)
 
    # 加载配置文件
    app.config.from_object(envs.get(env))
    # 初始化扩展对象
    init_extends(app)
    # 初始化视图
    init_views(app)
 
    return app

 

App/settings.py 

import re
 
 
class Config(object):
    DEBUG = False
    TESTING = False
    SQLALCHEMY_TRACK_MODIFICATIONS = False
 
    @classmethod
    def get_db_uri(cls,dbinfo):
        engine = dbinfo.get(ENGINE) or "sqlite3"
        driver = dbinfo.get(DRIVER) or ""
        name = dbinfo.get(NAME) or ""
        user = dbinfo.get(USER) or ""
        port = dbinfo.get(PORT) or ""
        host = dbinfo.get(HOST) or ""
        password = dbinfo.get(PASSWORD) or ""
 
        if re.match(r^sqlite3?$, engine):
            # 默认是sqlite数据库
            db_uri = "{}://{}/{}.{}".format(driver, host, name, engine)
        else:
            # database: engine+driver://user:password@host:port/database
            db_uri = "{}+{}://{}:{}@{}:{}/{}".format(
                engine, driver, user, password, host, port, name)
 
        # 返回数据库连接地址
        return db_uri
 
class DevlopConfig(Config):
    DEBUG = True
 
    # dbinfo = {
    #
    # }
 
    # 加载数据库
    # SQLALCHEMY_DATABASE_URI = super().get_db_uri(dbinfo)
    SQLALCHEMY_DATABASE_URI = sqlite:///demo3.sqlite3
 
# 设置环境设置配置
envs = {
    devlop:DevlopConfig,
}
 
 
def config():
    """当前的配置文件"""
    return envs.get(os.environ.get(FLASK_ENV))

 

App/views.py

from flask import Blueprint
 
blue = Blueprint(blue,__name__)
 
def init_views(app):
    app.register_blueprint(blue)
 
@blue.route(/)
def index():
    return "Index"

 

App/extends.py

from flask_migrate import Migrate
from flask_sqlalchemy import SQLAlchemy
 
models = SQLAlchemy()
migrate = Migrate()
 
def init_extends(app):
    # 初始化模型类,及迁移模型对象
    models.init_app(app)
    migrate.init_app(app,models)

 

App/models.py

from .extends import models
 
class User(models):
    id = models.Column(models.Integer,primary_key=True)
    username = models.Column(models.String)
    password = models.Column(models.String)

 

Flask拆分/结藕

原文:https://www.cnblogs.com/duzhaoqi/p/14408262.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!