新闻项目——立项准备——框架搭建

第一步:立项

新建一个flask项目,并命名为news_it03(名字随便取就行),并指定一下配置。(下面是建立后的结果)

第二步:配置文件的加载

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:mysql@127.0.0.1:3306/news_data'
    # 动态追踪修改设置,如未设置只会提示警告
    SQLALCHEMY_TRACK_MODIFICATIONS = False

    

# 创建连接到MySQL数据库的对象
db = SQLAlchemy(app)

2.在MySQL数据库中创建相关数据库

create database news_data charset=utf8;

第四步:redis集成

1.代码的相关配置

from redis import StrictRedis

    

class Config(object):
    
    # 配置Redis数据库:因为redis模块不是flask的拓展,所以就不会自动从config中读取相关信息,只能自己读取。
    REDIS_HOST = "127.0.0.1"
    REDIS_PORT = 6379

    

# 创建连接到Redis数据库的对象
redis_store = StrictRedis(host=Config.REDIS_HOST, port=Config.REDIS_PORT)

2.测试redis是否连接成功

@app.route('/')
def index():
    # 测试Redis连接是否成功
    redis_store.set("name", "tangqiang")
    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的使用。

from flask impo Flask,session

@app.route('/')
def index()

    # 测试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)

 这里我们没有指定存放在哪,就去源代码里看看

 这就是我们要找的东西

说明:

SESSION_REDIS:用来指定session数据存储在后端的位置

SESSION_KEY_PREFIX:用来指定存储在redis时,它的前缀是什么。如下面源码所示,默认是"session:"开头。这个一般来说是不需要修改的。

SESSION_USE_SIGNER:是否使用签名,这个签名就是我们之前设置的SECRET_KEY。签名是为了数据的安全,当然是要进行使用的。

SESSION_PERMANENT:字面上的意思是设置session的永久有效,默认为True,但也只表示这个session数据可以存储一段时间。那怎么证明呢?我们CTRL+鼠标左键点击下图位置:

中间那个Flask

 来到代码里面,我们会发现session的存活周期为31天

 这31天的存活周期对我们来说太长了,我们要给它改改

复制代码
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       # 设置一天的有效期

 完成之后就可以测试一下,测试之前要注意:

  • 第一:删除之前测试时保存在浏览器的cookie
  • 第二:将redis中的相关数据清空

先看密钥:

 没问题之后,看redis中的相关内容:

 最后的看上去像是一推乱码,但其实是下面的内容:

 第七步: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()
原文地址:https://www.cnblogs.com/tyl23/p/13761747.html