2.新闻项目——项目准备——框架搭建

本文详细介绍了如何进行新闻项目的框架搭建,包括立项、配置文件加载、MySQL集成、Redis集成、开启CSRF保护、Session配置,以及使用Flask-Script进行数据库迁移扩展。在MySQL集成中涉及数据库创建,Redis集成则包括代码配置和连接测试。最后,文章讨论了Session的安全设置,防止敏感信息暴露在客户端。
摘要由CSDN通过智能技术生成

第一步:立项

新建一个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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值