工程创建和配置

  • 本章主题
  • 关键词
  • 准备工作
  • 测试创建 Flask 工程
  • 项目配置文件创建
  • 配置开发环境 config.py 文件
    • 新建配置文件
    • 确认需要配置哪些信息
    • 配置 MySQL 数据库
      • 安装所需模块
      • 数据库的配置信息
      • 创建并连接 数据库
    • 配置 Redis
      • 安装 redis 扩展包
      • redis 的配置信息
      • 创建并链接 Redis
    • 配置 Flask-Session
      • 安装所需模块
      • Flask-Session 的配置信息
      • 绑定 Flask-Session
    • 除了三面这 3个 主要配置外的一些附加配置
      • Post请求(wtf)
    • 汇总一下指定开发环境配置文件:config.py 文件
  • 项目设计模式
    • 工厂模式
  • 配置工程日志 logs 文件
    • 配置日志
    • 日志目录
    • 将 日志 放进项目中
    • 日志记录器的使用
  • 配置前端静态文件
    • 准备静态文件
  • 未完继续整理
    • 指定静态文件加载文件
  • 数据库中表的创建
  • 总结小便条

本章主题

  

关键词

  

准备工作

  创建虚拟环境

pipenv shell

  安装Flask框架

pip install flask

  创建Flask工程。

  

测试创建 Flask 工程


  

  点击工作台返回的地址: http://127.0.0.1:5000/ ;确认返回信息:

  通过浏览器返回的信息可以确定 Flask 工程的创建以及前期的准备没问题。

  

项目配置文件创建

  确认过 Flask 工程 的创建以及前期的准备没问题后,测试文件 app.py 成功的完成了他的历史使命,可以删除了;接下来我们来创建 Flask 工程 必备的那些文件。

  首先我们要创建两夹两包。分别是:
    管理业务逻辑的:lghome 包 ;
    管理项目运行日志的:logs 包 ;
    管理项目配置文件的:config.py 文件 ;
    管理入口文件的:manage.py 文件 。

  接下来再来介绍一下 管理业务逻辑的 lghome 包里的四个文件负责的功能都是什么:
    api_vi_0 文件夹的主要功能是:v1_0 版本的主要功能业务逻辑存放点 ;
    libs 文件夹的主要功能是:第三方功能存放点 ;
    static 文件夹的主要功能是:静态资源文件存放点 ;
    utils 文件夹的主要功能是:自定义工具文件存放点 ;
    _init_.py 文件的主要功能是:管理项目运行的业务逻辑的管理文件 ;
    web_html.py 文件的主要功能是:前端资源的入口管理文件。

  

配置开发环境 config.py 文件

新建配置文件

  • 准备配置文件目录
  • 准备开发环境配置内容

  

确认需要配置哪些信息

  在完成 配置文件 的新建后,接下来我们一起来看下在 配置文件 里需要准备哪些内容:

class Config(object):"""配置信息"""# 数据库# Redis# Flask-Session

  接下来,我们分别来完成这三块内容的配置:

  

配置 MySQL 数据库

安装所需模块

pip install flask_sqlalchemy

  

数据库的配置信息

class Config(object):"""配置信息"""# 数据库五元素USERNAME = 'root'PASSWORD = 'root'HOSTNAME = '127.0.0.1'PORT = 3306DATABASE = 'home'# 数据库链接 URLSQLALCHEMY_DATABASE_URI = 'mysql+mysqlconnector://{}:{}@{}:{}/{}'.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE)SQLALCHEMY_TRACK_MODIFICATIONS = True

  

创建并连接 数据库

app.config.from_object(Config)db = SQLAlchemy(app)

  

配置 Redis

安装 redis 扩展包

pip install redis

  

redis 的配置信息

  数据缓存服务采用Redis数据库

import redis # 导入 redis 模块class Config(object):"""配置信息"""# Redis 配置REDIS_HOST = '127.0.0.1'REDIS_PORT = 6379

  

创建并链接 Redis

redis_store = redis.Redis(host=Config.REDIS_HOST, port=config_class.REDIS_PORT)

  

配置 Flask-Session

安装所需模块

pip install Flask-Session

  

Flask-Session 的配置信息

class Config(object):"""配置信息"""# Flask-SessionSECRET_KEY = 'ASDFFGTRGRVX'                                   # session 签名定义 的 加盐SESSION_TYPE = 'redis'                                            # session 存储位置SESSION_REDIS = redis.Redis(host=REDIS_HOST, port=REDIS_PORT)  # session 链接存储位置SESSION_USE_SIGNER = True                                      # session 签名定义PERMANENT_SESSION_LIFETIME = 86400                               # session 有效时间定义    单位:s

  

绑定 Flask-Session

app.config.from_object(Config)Session(app)

  

除了三面这 3个 主要配置外的一些附加配置

Post请求(wtf)

  Post请求(wtf)的主要功能:验证表单的 csrf

import flask_wtf import CSRFProtectclass Config(object):"""配置信息"""......app.config.from_object(Config)CSRFProtect(app)

  之后,在项目里,如果提交 POST 请求的话,都会通过这个 csrf 的验证。

  有关这个 csrf 的如何验证前端表单的细解,我会在后面细讲。

  

汇总一下指定开发环境配置文件:config.py 文件

import redisclass Config(object):"""配置信息"""# 数据库 链接配置HOSTNAME = '127.0.0.1'PORT = 3306USERNAME = 'root'PASSWORD = 'root'DATEBASE = 'homes'# 链接 数据库SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://{}:{}@{}:{}/{}'.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATEBASE)SQLALCHEMY_TRACK_MODIFICATIONS = True# Redis 配置REDIS_HOST = '127.0.0.1'REDIS_PORT = 6379# Flask-SessionSECRET_KEY = 'ASDFFGTRGRVX'                                      # session 签名定义 的 加盐SESSION_TYPE = 'redis'                                            # session 存储位置SESSION_REDIS = redis.Redis(host=REDIS_HOST, port=REDIS_PORT)  # session 链接存储位置SESSION_USE_SIGNER = True                                      # session 签名定义PERMANENT_SESSION_LIFETIME = 86400                               # session 有效时间定义    单位:sclass DevConfig(Config):  # 开发环境  Development"""开发环境"""DEBUG = Trueclass ProConfig(Config):  # 生产环境  Project"""生产环境"""# 工厂模式 的 前期铺垫
config_map = {'dev':DevConfig,'pro':ProConfig
}

  

项目设计模式

  只要从事计算机开发,有会有一个必须经过的 基础性话题设计模式。那什么是 设计模式 呢?

  简单的介绍一下:设计模式 就是为了 优化代码优化开发优化程序运转 的一种逻辑计算方法。我们统称为 设计模式

  再简单直白的解释:一切为工程开发做优化和简化的方法都叫 设计模式

  本篇介绍第一个 设计模式 :工厂模式。

  之后在我 Flask框架项目 学习开发的过程中,陆陆续续的会介绍各种不同的开发模式。

  

工厂模式

  项目的环境分为 开发环境生产环境

  • 开发环境:用于编写和调试项目代码;
  • 生产环境:用于项目线上部署运行。

  前面我们完成了 配置类 Config 的定义,但是项目的环境分为 开发环境生产环境,那我们怎么确定什么时候调用 配置类 Config 呢?这个时候就需要用到 工厂模式 了。

  首先,我们需要把 配置类 Config 存放到管理配置信息的 Config.py 文件 中,并且在 Config.py 文件 中创建两个类,分别是管理 开发环境DevConfig(Config) 类 和 管理 生成环境ProConfig(Config) 类,这两个类都是继承 配置类Config 的子类;在最后创建一个管理两个两个类的 字典config_map ,方便后续对他们的调用。

class Config(object):"""配置信息"""......class DevConfig(Config):  # 开发环境  Development"""开发环境"""DEBUG = Trueclass ProConfig(Config):  # 生产环境  Project""""""# 工厂模式 的 前期铺垫
config_map = {'dev':DevConfig,'pro':ProConfig
}

  我们先介绍一下,如果不用 工厂模式 但又想在 管理业务逻辑的 lghome 包里的 _init_.py 文件想要调用 不同模式的 Config 类来创建 app 该怎么操作:

from config import DevConfig, ProConfigdef create_app(config_name):app = Flask(__name__)# 传统模式if config_name == 'dev':from config import DevConfigapp.config.from_object(DevConfig)else:from config import ProConfigapp.config.from_object(ProConfig)return app

  接下来我们一起来对比一下,用 工厂模式 在 管理业务逻辑的 lghome 包里的 _init_.py 文件想要调用 不同模式的 Config 类来创建 app 该怎么操作:

from config import config_mapdef create_app(config_name):app = Flask(__name__)config_class = config_map.get(config_name)   # 工厂模式调用需要用的 xx环境app.config.from_object(config_class)       # 加载配置文件类return app

   6 : 2 ,这就是 设计模式 的魅力。

  既然,我们现在已经通过 设工程模式app 的创建进行了优化,那么我们直接就完成 管理业务逻辑的 lghome 包里的 _init_.py 文件的功能定义:

from flask import Flask
from config import config_map                       # 配置信息文件
from flask_sqlalchemy import SQLAlchemy             # 数据库
from flask_session import Session                   # Session
from flask_wtf import CSRFProtect                   # 表单验证
import redisdb = SQLAlchemy()                                  # redis_store = None                                   # Redisdef create_app(config_name):app = Flask(__name__)config_class = config_map.get(config_name)        # 工厂模式app.config.from_object(config_class)          # 加载配置文件类db.init_app(app)                               # 使用 app 初始化 db        什么时候调用,什么时候再绑定global redis_store                              # 将 redis_store 定义为一个 全局变量redis_store = redis.Redis(host=config_class.REDIS_HOST, port=config_class.REDIS_PORT)  # 创建 Redis 链接Session(app)                                   # session 绑定CSRFProtect(app)                                # post 请求   wtf    csrfreturn app

  

配置工程日志 logs 文件

  工程日志的功能是为了 记录 项目 自启动后每一步操作反馈结果

配置日志

def setup_log():# 设置日志的的登记  DEBUG调试级别logging.basicConfig(level=logging.DEBUG)# 创建日志记录器,设置日志的保存路径和每个日志的大小和日志的总大小file_log_handler = RotatingFileHandler("logs/log.log", maxBytes=1024*1024*100,backupCount=100)# 创建日志记录格式,日志等级,输出日志的文件名 行数 日志信息formatter = logging.Formatter("%(levelname)s %(filename)s: %(lineno)d %(message)s")# 为日志记录器设置记录格式file_log_handler.setFormatter(formatter)# 为全局的日志工具对象(flaks app使用的)加载日志记录器logging.getLogger().addHandler(file_log_handler)

  

日志目录

  在 项目目录 下新建一个 logs文件夹

  

将 日志 放进项目中

import logging
from logging.handlers import RotatingFileHandlerdef setup_log():......def create_app(config_name):setup_log()app = Flask(__name__)......

  有没有发现 setup_log() 放在 app = Flask(__name__) 的上面。为什么呢?按理说,不该是 app = Flask(__name__) 最大吗?

  按日常代码顺序来说 app = Flask(__name__) 确实是老大,下面的 小弟们 都是看着它吃饭的,但是 setup_log() 是本项目的 书记员 ;懂得成年朋友们都懂:班长 是用来管下面 所有的 小弟 的,但是 书记员 是用来 监督 班长的;书记员 虽然没什么 实权,但是 班长每个动作班长带 小弟们 的 每个操作,小弟们 在下面的 每个操作书记员 都要记录清清楚楚,需要向老板我汇报的。

162. Python语言 的 Flask框架项目 之 项目准备 第三章 :工程创建和配置相关推荐

  1. 《Python语言程序设计》王恺 机械工业出版社 第三章课后习题答案

    ​​第三章   函数 3.7 课后习题 (1)在Python语言中,使用函数分为两个步骤:定义函数和调用函数 (2)在Python语言中,函数定义需要使用def关键字 (3)形参是在定义函数时函数后面 ...

  2. 147. Python语言 的 Flask框架项目前导 之 Flask数据库 第三章 :SQLAlchemy-ORM 介绍

    SQLAlchemy-ORM 介绍 本章主题 关键词 ORM介绍 使⽤SQLAlchemy 总结小便条 本章主题    关键词    ORM介绍   随着项⽬越来越⼤,采⽤ 原⽣SQL 的⽅式在代码中 ...

  3. python的flask实现第三方登录怎么写_Python语言的Flask框架应用程序实现使用QQ账号登录的方法...

    本文主要向大家介绍了Python语言的Flask框架应用程序实现使用QQ账号登录的方法,希望对大家学习Python语言有所帮助. Flask-OAuthlib是OAuthlib的Flask扩展实现, ...

  4. 师傅带徒弟学:Python Web之Flask框架-关东升-专题视频课程

    师傅带徒弟学:Python Web之Flask框架-317人已学习 课程介绍         Python Web是Python语言一个重要的应用方面,Python Web有很多,其中Flask和Dj ...

  5. 【Python】基于 Flask 框架,模拟微信朋友圈的服务端

    [Python]基于 Flask 框架,模拟微信朋友圈的服务端 一.目的:模拟微信朋友圈的服务端,需要满足以下场景: 1.发表内容时带上图片信息,内容包括(具体内容和id,id指定全局唯一标识),客户 ...

  6. PySide是Python语言的Qt框架的一个绑定。PySide支持跨平台和本地GUI应用程序开发,是在Python 2.6、2.7和3.x版本下可用。

    PySide是Python语言的Qt框架的一个绑定.PySide支持跨平台和本地GUI应用程序开发,是在Python 2.6.2.7和3.x版本下可用. 在开始使用PySide之前,需要在你的机器上安 ...

  7. python语言包含的错误,Python语言程序中包含的错误,一般分为三种,以下____________不是其中的一种...

    Python语言程序中包含的错误,一般分为三种,以下____________不是其中的一种 答:编译错误 人体体温能自动调控在37度,其原因是( ). 答:人体内产生的热能是分批放出的 人体内有完善的 ...

  8. python语言程序设计嵩天-python语言程序设计基础(嵩天版),第二章程序练习题...

    python语言程序设计基础(嵩天版),第二章程序练习题 欢迎访问江南烧酒的博客 2.2汇率兑换程序.按照1美元=6人民币汇率编写一个美元和人民币的双向兑换程序. """ ...

  9. java程序语言设计第三章答案_java语言程序设计课后习题解答张思民第三章

    java语言程序设计课后习题解答张思民第三章 1 第3章 面向对象程序设计基础 [1]什么是 Java 程序使用的类?什么是类库? [解答]:Java 程序的基本单位是类.对象是对事物的抽象,而类是对 ...

最新文章

  1. 下列不属于python第三方库的是-测验9: Python计算生态纵览 (第9周)-单选题
  2. Java线程详解(6)-线程的交互
  3. sonarqube7.8汉化教程:安装中文插件
  4. BZOJ1996:[HNOI2010]CHORUS 合唱队(区间DP)
  5. 数据结构实验:连通分量个数
  6. 【编程范式】连续数据的前面部分后移的实现
  7. jQuery基础学习笔记(中)
  8. vue全局变量的 定义与任意调用
  9. Stanford CS230深度学习(九)注意力机制和语音识别
  10. AutoPlay Media Studio光盘开发利器
  11. 二叉树的先序,中序,后序,层次的递归及非递归遍历
  12. typeorm 更新_typeORM 多对多关系不同情况的处理
  13. 让chrome浏览器支持ajax跨域
  14. 计算机表格函数最大值操作,excel表格的各函数的基本操作
  15. 操作系统的概念,功能,作用
  16. 什么叫做会议中控及其实际应用
  17. python 计算均值 方差 标准差
  18. 八、Kubernetes 网络和负载均衡
  19. 阿里api网关接口客户端demo,java实现源码,其他语言可参考
  20. 大型电商平台设计实例:电商平台总体设计和业务模型设计

热门文章

  1. requests获取到的cookies数量不够的解决办法
  2. 计算机毕设(附源码)JAVA-SSM基于协同过滤算法的食谱定制系统
  3. js 如何代替java中的长整型_Javascript长整型
  4. Oracle查询表空间使用情况
  5. MySQL索引优化:索引失效以及不适合建立索引的场景
  6. JS 异步获取天气接口
  7. c++11 总结-2
  8. LeetCode——1871. 跳跃游戏 VII(Jump Game VII)[中等]——分析及代码(Java)
  9. mycat读写分离测试
  10. 基于Vue和SpringBoot的毕业生追踪系统的设计和实现