flask_工程化搭建一个项目目录demo

学习目标:flask_工程化一个项目目录

经历差不多2周学习的终于敲出一个demo!!!

引言:

  1. 本文主要内容是如何搭建一个类似于MVC思想web项目目录结构demo,当然暂时M(模型)C(控制)还没有完美抽离出来。
  2. 本demo采用REST-API风格,只专注于后端逻辑

学前必备:

  • 能理解单文件flaskWEB框架的每一行代码。
  • 例如:安装好flask后,运行下面代码 访问 http://127.0.0.1:5000 根目录。
from flask import Flask
app = Flask(__name__)			#Flask构建用函数用当前模块(__name__)的名称作为参数

@app.route('/')			#我的理解为路由修饰器
def hello_world():
  return 'Hello World'
  
#if语句表示:保证在执行到这个目标时,web开发服务器才会启动
if __name__ == '__main__':
  app.run()
  • 认识flask,了解Flask是基于Werkzeug 、WSGI工具包和Jinja2
  • WSGI:Web Server Gateway Interface ;web服务器网关接口:Python Web应用程序开发的标准。 WSGI是Web服务器和Web应用程序之间通用接口的规范。
  • Werkzeug:一个WSGI的工具包,实现请求响应对象和使用函数。这使得能够在其上构建web框架。 Flask框架使用Werkzeug作为其基础之一
  • 当然本demo不关注前端因此不关注jinjia2。
  • 安装python环境然后记得创建虚拟环境,来保持日后的多个项目因版本而引起的不必要的麻烦。

先看一下我的demo项目目录结构:

之前用过egg开发后端因此在使用Flask时思想没有进步,仍停留在egg结构的思想下,当然Flask非常灵活,若爱能充分满足满足你的开发习惯。

我的目录:
在这里插入图片描述

  1. PyFly 目录是我的项目总目录。
  2. api目录是我的 API 接口业务逻辑、配置、拓展插件等总目录。
  3. api下 controllers 目录是我的业务逻辑接口目录,用于接受处理请求。
  4. api 下 config.py 是我的配置文件,存放环境配置参数。
  5. api 下 extensions.py 是我的可拓展插件存放的位置。
  6. api 下 init.py 是存放初始化模板全局函数。
  7. PyFly 下 myenv 目录是本项目的虚拟环境目录。
  8. PyFly 下 manager.py 初始化配置,拓展插件和 通过工厂函数初始化Flaskweb。

从0到1建设工程目录结构

代码知识点请看我的其他文章。

  1. 创建 PyFly 目录作为工作目录,并创建虚拟环境(百度如何创建虚拟环境)。

  2. 建立 api 目录 并在 api 目录下创建controllers目录和__init__.py(魔法方法)文件。在这里插入图片描述
    在这里插入图片描述

  3. 创建 controllers 目录下的 book.py 和user.py文件。
    book.py在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    user.py
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  4. controllers下的 init.py 使用蓝图将controllers目录封装成一个模块。在这里插入图片描述

  5. 在 controllers 下创建 config.py 配置文件在这里插入图片描述

  6. 在 controllers 下创建 extensions.py 文件存放拓展插件在这里插入图片描述
    7.最后在 PyFly 目录下创建管理启功文件manager.py
    在这里插入图片描述

其他知识:

请求响应循环:

请求上下文

程序想要访问一些对象(自定义程序对象,或者请求对象),如何做呢?
这些变量可以通过上下文的方式来定义。

  • current_app:程序上下文,当激活程序的程序实例。
  • g:程序上下文,处理请求时,用于临时存储的对象。每次请求都会重设这个变量。
  • request:请求上下文,封装客户端发出的HTTP请求中的内容。
  • session:请求上下文,用于存储请求之间需要“记住”的值的字典。

生命周期:程序上下文、请求上下文都是子啊处理完成后被删除。

程序上下文,就是在被推送后可以被使用,



版权声明:本文为fox584832636原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。