美文网首页
2020-06-15--flask项目01--项目配置

2020-06-15--flask项目01--项目配置

作者: program_white | 来源:发表于2020-06-16 13:17 被阅读0次
    • 创建Github仓库
    • pycharm创建项目
    • 搭建项目基本结构
    • 项目基本配置
    • app管理和数据迁移Migrate
    • 配置对象Config的修改优化
    • app业务的分层
    • 开发模式的切换选择

    创建Github仓库

    仓库名称:flask_news_info


    github地址:https://github.com/jokerLiz/flask_news_info

    并在Desktop上打开



    设置存放位置后,点击clone



    这时候已经在设置的位置上存放了一些文件。

    pycharm创建项目

    在pycharm上新建pure python文件



    点击create,打开.gitignore文件,添加

    *.idea
    

    这是GitHub Desktop会发生变化


    搭建项目基本结构

    在项目文件下创建manage.py:
    manage.py:

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

    右键运行:



    提交github。


    项目基本配置

    在之前学习flask的时候,有三种配置方式,最常用的就是对象配置和文件配置。

    那么我们使用对象配置的方式进行配置项目。

    在Config类中写配置项有:

    • DEBUG
    • SECRET_KEY 加密
    • mysql数据库设置
    • redis数据库设置
    • flask session设置(配置信息项都在Session中)

    在类外进行关联app:

    • 关联配置类Config
    • SQLAlchemy关联mysql数据库
    • redis数据库的初始化
    • 开启csrf保护
    • 设置app的session(在Config类中配置参数)
    '''基本配置'''
    class Config(object):
        DEBUG = True
    
        #设置SECRET_KEY
        key = os.urandom(24)       #随机字符串
        SECRET_KEY = key
    
    
        '''mysql数据库设置'''
        host = 'localhost'
        port = '3306'
        useranme = 'root'
        password = 'root'
        db = 'information1'
    
        mysqlpath = 'mysql+pymysql://{}:{}@{}:{}/{}'.format(useranme, password, host, port, db)
        app.config['SQLALCHEMY_DATABASE_URI'] = mysqlpath
    
        #数据库相关配置
        # 设置每次请求后自动提交数据库的改动
        app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
        # 动态追踪设置
        app.config['SQLALCHEMY_TRACK_MODUFICATIONS'] = True
        # 显示原始sql
        app.config['SQLALCHEMY_ECHO'] = True
    
        '''redis数据库设置'''
        RDIES_HOST = '127.0.0.1'
        RDIES_PORT = 6379
    
        '''flask session配置信息'''
        SESSION_TYPE = 'redis'       #指定session保存到redis数据库中
        SESSION_USE_SIGNER = True    #让cookie中的session被加密处理
        SESSION_REDIS = redis.StrictRedis(host=RDIES_HOST,port=RDIES_PORT)     #使用指定的redis的实例
        SESSION_PERMANENT = False      #过期时间
        PERMANENT_SESSION_LIFETIME = 86400    #session有效期
    
    app.config.from_object(Config)          #关联app配置类
    
    db = SQLAlchemy(app)          #关联mysql数据库
    # 初始化redis配置
    redis.StrictRedis(host=Config.RDIES_HOST,port=Config.RDIES_PORT)
    # 开启csrf保护,只用于服务器验 证
    CSRFProtect(app)
    # 设置session保存位置
    Session(app)
    

    app管理和数据迁移Migrate

    这里要用到两个库:

    from flask_script import Manager           # 管理app
    from flask_migrate import Migrate,MigrateCommand      #数据库迁移
    

    没有的化可以pip下载。
    使用步骤:
    在代码中添加:

    #管理app
    manager = Manager(app)
    
    #迁移数据库
    Migrate(app,db)      #参数1:app应用,参数2:数据库对象db
    manager.add_command('db',MigrateCommand)  
    
    if __name__ == '__main__':
        manager.run()
    

    这时候再启动项目时,不能启动,因为不是app.run().
    修改启动参数:



    再Parameters中添加:runserver



    点击apply即可
    启动:

    配置对象Config的修改优化

    咱之前我们把MVC三层都写在了一个py文件下,不易于管理。
    要把配置对象类Config脱离出来,通过导入的方式进行关联。
    步骤:

    1. 在项目下新建config.py
    2. 把Config类复制到config.py文件下。
      3.肯定会报一些未导入模块的错误,导入即可(切记不可互相导入)。
      4.在manage.py中导入config模块下的Config类。

    注意:修改配置类中的数据库配置项(去掉app.config[],直接给配置项设置值即可)


    运行:


    app业务的分层

    随着开发复杂程度的加大,需要一个包进行对其进行管理。
    步骤:
    1.项目下新建一个package包--info,这个包下有一个init.py文件,也就是初始化工作。
    2.把manage.py中的一些有关配置类Config的内容剪切到init.py中,3.肯定会报未导入某个内置模块的错误,带入即可。再把newsInfo中的app对象,db,对象,session对象带入即可。
    newsInfo/_init.py:

    from flask import Flask
    from flask_sqlalchemy import SQLAlchemy        #数据库
    from flask_wtf import CSRFProtect             #csrf保护
    from flask_session import Session             #设置session保存位置
    import redis
    from config import Config        #导入配置文件
    
    app = Flask(__name__)      #app实例
    
    app.config.from_object(Config)          #关联app配置
    
    db = SQLAlchemy(app)          #关联数据库
    
    # 初始化redis配置
    redis.StrictRedis(host=Config.RDIES_HOST,port=Config.RDIES_PORT)
    
    # 开启csrf保护,只用于服务器验 证
    CSRFProtect(app)
    
    # 设置session保存位置
    Session(app)
    

    manage.py:

    from newsInfo import app,db
    from flask_script import Manager           # 管理app
    from flask_migrate import Migrate,MigrateCommand      #数据库迁移
    from flask import session
    #管理app
    manager = Manager(app)
    
    #迁移数据库
    Migrate(app,db)
    manager.add_command('db',MigrateCommand)
    
    
    @app.route('/')
    def index():
        session['name2'] = 'lizhao2'
        return 'index'
    
    if __name__ == '__main__':
        manager.run()
    

    这样做也就将manage.py中的代码简化,类似于django,只起到一个启动的作用。而init.py所在的包newsInfo是用于存放app的,也类似于django,起到一个初始化app的作用。

    运行:


    开发模式的切换选择

    在开发的过程中,要经历三种环境分别是:开发环境,测试环境,生产环境。
    在config.py中编写这三个类,在开发时通过字典进行调用。
    步骤:
    1.在config.py中编写这三个类,并设置为字典的方式进行访问,在开发时通过字典进行调用。

    '''环境切换类'''
    #开发环境
    class DevelopConfig(Config):
        pass
    
    #测试环境
    class TestingConfig(Config):
        TESTING = True
    
    #生产环境
    class ProductConfig(Config):
        DEBUG = True
    
    #这三个类通过统一的字典进行配置类访问
    config_dict = {
        'develop':DevelopConfig,
        'testing':TestingConfig,
        'product':ProductConfig,
    }
    

    这三个类都继承于Config类。

    在下一节中说怎么在创建app是选择某个模式。

    相关文章

      网友评论

          本文标题:2020-06-15--flask项目01--项目配置

          本文链接:https://www.haomeiwen.com/subject/rcghxktx.html