zoukankan      html  css  js  c++  java
  • 新闻项目——立项准备——框架搭建

    第一步:立项

    新建一个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()
  • 相关阅读:
    struts 简单配置运用做一个简单的注册
    hibernate 锁 (转)
    Hibernate 缓存机制(转)
    解决Hibernate:could not initialize proxy
    el 表达式用法(转)
    自动生成Hibernate框架结构
    封装hibernate 初始化类 方便调用 (静态单例模式)
    构建hibernate 框架实现增删改查功能
    JSON 与 对象 、集合 之间的转换(转)
    Ajax 引擎 传输数据的方法
  • 原文地址:https://www.cnblogs.com/tyl23/p/13761747.html
Copyright © 2011-2022 走看看