zoukankan      html  css  js  c++  java
  • Flask项目的拆分

    Flask介绍:

    • Flask是一种使用Python编写的轻量级的Web框架, WSGI工具采用Werkzeug,模板引擎使用Jinja2, Flask使用的是BSD授权
    • Flask核心简单, 可以自定义扩展, 没有固定的数据库和模板等设置, 简单轻便
    • Flask也有web开发'微'框架之称

    开始项目

      下面是官网中的一个Flask项目, 只需要简单的7行代码, 我们就是可以让一个Flask项目运行起来。

    from flask import Flask
    
    app = Flask(__name__)
    
    
    @app.route('/')
    def hello_world():
        return 'Hello World!'
    
    
    if __name__ == '__main__':
        app.run()

    项目拆分

      Flask由于框架体量小, 所有的拓展包都需要我们自己去安装, 所以一个Flask项目会安装很多的拓展包是很常见的。基于项目的可拓展性和代码的可阅读性, 当代码量较大时, 将所有的代码写在一个文件中是一件很可怕的事, 所以我们就要对其进行拆分, 主要还是参考 MVC模式进行, 将不同的功能放在其对应的模块中, 方便我们进行阅读。

    • 创建app的文件目录, 将views 和 models 写入其中进行管理

    • 在app目录下创建 static 目录,存放静态文件

    • 在app目录下创建 templates 目录, 存放网页模板

    • 在app目录下创建settings.py文件,存放所有的配置文件

    • 创建ext.py文件,用来管理扩展的工具函数
    • 在app下的__init__.py文件中,创建一个函数用来创建app并整合所有的配置信息。
    • 将主要的执行内容写在执行文件manage.py中,manage.py和创建的app目录为同一级, 在这里面调用app下__init__.py中创建的函数来创建app,并且引入 Manage 进行管理app。

    整体结构:

     

    from flask_script import Manager
    from myapp import create_app
    
    app = create_app('debug')
    manage = Manager(app = app)
    
    if __name__ == '__main__':
        manage.run()
    manage.py

    static目录用来存放静态文件目录。如css,js,img等。templates目录用来存放html模板文件。

    from flask import Flask   
    from myapp.ext import init_ext   #导入扩展库中的函数
    from myapp.settings import conf    #从settings中导入配置文件
    from myapp.views import init_blue   #从views中导入注册蓝图的函数
    from myapp.models import db    #从models中导入实例化SQLAlchemy的对象
    
    
    def create_app(env_name):     #创建一个创建app的函数,并传入要配置的环境
        if not env_name in conf.keys():
            raise Exception('环境名称有问题')
        app = Flask(__name__)  
    
        app.config.from_object(conf.get(env_name))    #根据传入的环境导入settings配置
    
        init_ext(app)   #实例化第三方插件
    
        init_blue(app)   #实例化蓝图
    
        return app
    __init__.py
    from flask_session import  Session
    from flask_sqlalchemy import SQLAlchemy
    
    
    def init_ext(app):   #实例化第三方插件并绑定app
        se = Session()
        se.init_app(app)
    
        db = SQLAlchemy()
        db.init_app(app)
    ext.py
    from flask_sqlalchemy import SQLAlchemy
    
    db = SQLAlchemy()  #实例化SQLAlchemy对象
    
    class Student(db.Model):
        id = db.Column(db.Integer,primary_key=True,autoincrement=True)
        name = db.Column(db.String(30),nullable=True,unique=True)
    models.py
    import os
    from redis import StrictRedis
    
    # 数据库的连接拼写规则
    def get_db_uri(conf):
        uri = '{backend}+{engine}://{user}:{pwd}@{host}:{port}/{name}'.format(
            backend=conf.get('backend'),
            engine=conf.get('engine'),
            user=conf.get('user'),
            pwd=conf.get('pwd'),
            host=conf.get('host'),
            port=conf.get('port'),
            name=conf.get('name'),
        )
        return uri
    
    class Config:
        Debug = False
        Test = False
        Online = False
        SECRET_KEY = 'aisofhas'
        #做session持久化的配置
        SESSION_TYPE = 'redis'     # 指定session存储方案
        SESSION_KEY_PREFIX = 'myapp:'     # 设置缓存的开头
    
        SQLALCHEMY_TRACK_MODIFICATIONS = False
    
    
    class DebugConfig(Config):
        Debug = True
        SESSION_REDIS = StrictRedis('127.0.0.1',db=1)
        DATABASE = {
            'backend':'mysql',
            'engine':'pymysql',
            'user':os.environ.get('DB_USER'),
            'pwd':os.environ.get('DB_PASSWD'),
            'host':'127.0.0.1',
            'port':3306,
            'name':'hzflask'
        }
        SQLALCHEMY_DATABASE_URI = get_db_uri(DATABASE)
    
    class TestConfig(Config):
        Test = True
        SESSION_REDIS = StrictRedis('127.0.0.1', db=2)
        DATABASE = {
            'backend': 'mysql',
            'engine': 'pymysql',
            'user': os.environ.get('DB_USER'),
            'pwd': os.environ.get('DB_PASSWD'),
            'host': '127.0.0.1',
            'port': 3306,
            'name': 'hzflask2'
        }
        SQLALCHEMY_DATABASE_URI = get_db_uri(DATABASE)
    
    class OnlineConfig(Config):
        Online = True
        SESSION_REDIS = StrictRedis('127.0.0.1', db=3)
        DATABASE = {
            'backend': 'mysql',
            'engine': 'pymysql',
            'user': os.environ.get('DB_USER'),
            'pwd': os.environ.get('DB_PASSWD'),
            'host': '127.0.0.1',
            'port': 3306,
            'name': 'hzflask3'
        }
        SQLALCHEMY_DATABASE_URI = get_db_uri(DATABASE)
    
    conf = {
        'debug':DebugConfig,
        'test':TestConfig,
        'online':OnlineConfig,
    }
    settings.py
    from flask import Blueprint, session, render_template
    from myapp.models import db, Student
    
    blue = Blueprint('wusir',__name__)
    
    def init_blue(app):
        app.register_blueprint(blue)
    
    @blue.route('/')
    def index():
        return 'index'
    views.py
    Fake it,till you make it
  • 相关阅读:
    yii 引入文件
    CodeForces 621C Wet Shark and Flowers
    面试题题解
    POJ 2251 Dungeon Master
    HDU 5935 Car(模拟)
    HDU 5938 Four Operations(暴力枚举)
    CodeForces 722C Destroying Array(并查集)
    HDU 5547 Sudoku(dfs)
    HDU 5583 Kingdom of Black and White(模拟)
    HDU 5512 Pagodas(等差数列)
  • 原文地址:https://www.cnblogs.com/wusir66/p/9954460.html
Copyright © 2011-2022 走看看