- 创建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脱离出来,通过导入的方式进行关联。
步骤:
- 在项目下新建config.py
- 把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是选择某个模式。
网友评论