Flask
Flask 项目流程
1.项目创建
-->选定好虚拟环境和安装flask模块
-->manage.py #管理App运作的一个文件,里面封装一些操作执行命令
-->templates #模板目录,存放一些html文件 (需要在app创建时指定template_folder路径)
-->static #静态文件目录,存放一些css,js文件(需要在app创建时指定static_folder路径)
-->创建一个App包
--> __init__.py #初始化文件(初始化app)
--> models.py #模型文件(模型类需要继承 ORM对象的Model 类,才能有映射关系)
--> settings.py #创建一个完整的app需要初始化一些配置,根目录,数据库,开发模式,调试模式,数据库禁止追踪等等。
--> views.py #视图函数,处理业务逻辑,为了让不同功能的模块不互相干扰,便有了 Blueprint()蓝图对象相应的匹配路由route,@blue.route('/路径/'),实现的前端发送过来的请求,处理的函数。
--> apis.py #应用程序接口,前后端分离时使用,需要导入 flask_restful 中的一些类,创建的类需要继承Resource,才能被当作是资源接口供路由调用,创建的类需要定义一些函数用来返回处理好的数据(json对象),为了确保返回的数据统一性和规范性则有了格式化数据模型,在定义数据模型过程中需要导入fields来为数据声明数据类型,在所需要调用格式化模型的函数中引用装饰器@marshal_with(定义好的格式化模型名称)
--> urls.py #为了实现前后端分离,需要url与资源接口进行匹配调用。调用api对象的add_resource('api资源类名','/url路由/')方法将url与资源接口结合
--> exts.py 创建一些插件并初始化插件,在app中注册生效,第三方库导入,常见的有
# 生成 ORM对象,映射到数据库,
from flask_sqlalchemy import SQLAlchemy
# ORM映射到数据库迁移文件的命令
from flask_migrate import Migrate
# 缓存,初始化后可以直接使用其提供的 装饰器 @cache.cached(timeout=3)来对服务器请求回来的数据进行缓存(常用于一些数据在一段时间不做频繁修改且请求量大的数据,缓存即缓解了服务器的压力还能让用户的体验更好))
from flask_cache import Cache
# 调试模块,方便开发者快速发现错误所在,前提是在开发环境development和返回一个模板的html文件中才能生效
from flask_debugtoolbar import DebugToolbarExtension
# bootstrap框架提供一个模块 'bootstrap/base.html' 可以供开发时继承使用已经写好的一些结构样式
from flask_bootstrap import Bootstrap
# api接口,能实现完全的前后端分离,返回到前端的是一个 json对象(可以对其进行数据格式化)
from flask_restful import Api
2.初始化
-->__init__.py create_app() #app创建配置好环境和数据库的配置,并注册所要用的插件,并指定好template_folder和static_folder文件路径
-->调用init_exts(app) #初始化插件
--> exts.py init_exts(app) #各种插件的初始化,先生成插件对象,再调用每个对象的 init_app(app)方法对插件初始化,需要对数据库操作的还需加上orm对象init_app(app,db)
--> models.py #模型类初始化,需要引入已有的orm对象db,并继承db.Model,才能将类对象与数据库建立映射关系
--> views.py #若使用蓝图对路由进行分配,需要创建一个蓝图blue对象,blue = Blueprint('蓝图名',__name__)
--> apis.py #若使用api资源接口进行资源路由调用,需要创建资源类,类需要继承flask_restful中Resource类
--> #资源接口返回json对象,可能需要用到格式数据模型(字典),所谓数据模型就是将要返回的数据对象经过指定的数据模型的装饰器装饰后返回的结果。常用的数据类型有 fields.Integer fields.String,若接受的是一个对象数据,则需要 fields.Nested(数据模型2名称)来对对象数据继续格式化输出。若接受的是一个列表对象,则需要 fields.List(数据模型3名称)对每个元素类型进行格式化,若列表中每个元素类型是一个对象,则fields.List(fields.Nested(数据模型4名称)).
3.视图函数进行业务逻辑处理/api资源接口进行资源调配(业务逻辑)
-->
--> (根据项目需求编写)