第一步:立项
新建一个Flask项目,并命名为news,并指定我们之前配置的环境。(注意:路径必须纯英文,要不要后续要报错)
下面是建立后的结果
第二步:配置文件的加载
class Config(object):
"""配置文件的加载"""
# 开启调试模式
DEBUG = True
………………
app.config.from_object(Config)
第三步:MySQL的集成
1.代码相关配置
from flask_sqlalchemy import SQLAlchemy
....
class Config(object):
.....
# 配置MySQL数据库连接信息,真实开发中要使用MySQL数据库的真实ip地址
SQLALCHEMY_DATABASE_URI = "mysql://root:123456@127.0.0.1:3306/news"
# 动态追踪修改设置,如未设置只会提示警告
SQLALCHEMY_TRACK_MODIFICATIONS = False
....
# 创建连接到MySQL数据库的对象
db = SQLAlchemy(app)
2.在MySQL中创建相关数据库
①下载Navicat_for_MySQL_11.0.10
链接:https://pan.baidu.com/s/1TXmxbYDj-6qBy59BlVLKwg?pwd=wk72
②新建数据库
排序规则不用写,然后确定即可
第四步:Redis集成
1.代码配置
from redis import StrictRedis
....
class Config(object):
....
# 配置Redis数据库:因为redis模块不是flask的拓展,所以就不会自动从config中读取相关信息,只能自己读取。
REDIS_HOST = "127.0.0.1"
REDIS_PORT = 6379
....
# 创建连接到Redis数据库的对象
sr = StrictRedis(host=Config.REDIS_HOST, port=Config.REDIS_PORT)
2.测试Redis连接是否成功
@app.route('/')
def hello_world():
# 测试Redis连接是否成功
redis_store.set("name", "zhangsan")
return 'Hello World!'
下面表示运行成功:
第五步:开启CSRF保护
当我们使用flask拓展的WTF表单时,默认开启了CSRF表单,而我们只需要在传入前台页面的时候进行简单设置就可以完成CSRF的保护。而在真实的开发中,前端一般不需要我们去写,所以,我们需要自己来完成CSRF保护。
from flask_wtf.csrf import CSRFProtect
....
# 开启CSRF保护:因为项目中的表单不再使用FlaskForm来实现,所以不会自动地开启CSRF保护,需要我们自己开启
CSRFProtect(app)
第六步:Session配置
在之前讲cookie和session的时候,我们说过隐私信息一般都会利用session保存到服务器当中。
而这里,我们要进行配置的是Session,和我们之前的session又有些不同。为了便于理解,我们先来回顾一下之前session的使用。
@app.route('/')
def hello_world():
# # 测试Redis连接是否成功
# redis_store.set("name", "tangqiang")
# 测试session
from flask import session
session["age"] = 20
return 'Hello World!'
当运行之后,会报错,因为我们并没有设置secret_key。
项目密钥设置:
....
class Config(object):
"""配置文件的加载"""
# 项目密钥:CSRF/session,还有一些其他的签名算法会用
SECRET_KEY = "dfjklajdfldsjaflasdjf"
....
配置完成之后,会发现,session已经写入到了cookie中。
可以看到,虽然我们的session经过加密,但是session相关内容还是放到了客户端的cookie中,也就是说存在着不安全的情况,那么最好的方式,还是将这部分内容放到服务器当中进行存储。所以,我们要设置相关内容,让session相关内容存放到服务器当中,而这个就是Session帮助我们完成的内容。Session是flask_session的拓展,所以要使用它需要导入相关的库。
from flask_session import Session
....
# 指定session存储在后端的位置
Session(app)
class Config(object):
"""配置文件的加载"""
....
# 指定session使用什么来存储
SESSION_TYPE = "redis" # 这里仅仅是告诉我们要使用redis来进行存储,但是还远远不够,我们需要将redis数据库的对象交给它进行进一步设置
# 指定session数据存储在后端的位置
SESSION_REDIS = StrictRedis(host=REDIS_HOST, port=REDIS_PORT)
# 是否使用设置的SECRET_KEY签名
SESSION_USE_SIGNER = True
# 设置过期时间,要求SESSION_PERMANENT等于True, 而默认的是session有效时间是31天
PERMANENT_SESSION_LIFETIME = 60*60*24 # 设置一天的有效期
好了,接下来测试一下设置后的session。测试之前完成两步操作:
- 第一:删除之前测试时保存在浏览器的cookie
- 第二:将redis中的相关数据清空
接下来,重新运行一下代码,看看session的设置效果。
看看cookie:
第七步:Flask-Script与数据库迁移扩展
from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand
...
# 创建脚本管理器对象
manager = Manager(app)
# 让迁移和app和数据库建立关系
Migrate(app, db)
# 将数据库迁移的脚本添加到manager
manager.add_command('mysql', MigrateCommand)
...
if __name__ == '__main__':
manager.run()