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
  • 相关阅读:
    C-二维数组,多维数组
    C-冒泡排序,选择排序,数组
    C语言的学习-基础知识点
    设置程序图标-初识IOS
    UIActivityIndicatorView-初识IOS
    生命周期-初识IOS
    机器学习
    开源的python机器学习模块
    基于Python使用scrapy-redis框架实现分布式爬虫 注
    Scrapy研究探索(六)——自动爬取网页之II(CrawlSpider)
  • 原文地址:https://www.cnblogs.com/wusir66/p/9954460.html
Copyright © 2011-2022 走看看