美文网首页
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