文章目录
- 一、蓝图
- 1. 什么是蓝图
- 2. 蓝图的运行机制
- 3. 运行创建的蓝图及加上路由前缀
- 4. 一个项目中多个蓝图
- 5. 使用蓝图构建项目
- 6. 修改文件(运行项目)
- 7. 项目运行中使用restful获取的接口数据页面调用问题
一、蓝图
1. 什么是蓝图
蓝图(blueprint):用于实现单个应用的视图、模板、静态文件的集合。
蓝图就是模块化处理的类。类似于django中app,子应用。
简单来说,蓝图就是一个存储操作路由映射方法的容器,主要用来实现客户端请求和URL相互关联的功能。 在Flask中,使用蓝图可以帮助我们实现模块化应用的功能。
flask中,将项目模块化,blueprint,是flask自带的一种开发模式,目的是为了方便开发大型的项目
2. 蓝图的运行机制
蓝图是保存了一组将来可以在应用对象上执行的操作。
注册路由就是一种操作,当在程序实例上调用route装饰器注册路由时,这个操作将修改对象的url_map路由映射列表。
当我们在蓝图对象上调用route装饰器注册路由时,它只是在内部的一个延迟操作记录列表defered_functions中添加了一个项。
当执行应用对象的 register_blueprint() 方法时,应用对象从蓝图对象的 defered_functions 列表中取出每一项,
即调用应用对象的 add_url_rule() 方法,这将会修改程序实例的路由映射列表。
- 蓝图结构
3. 运行创建的蓝图及加上路由前缀
- 启动项目 python+文件名
- 在加上路由前缀后
- 必须通过加上前缀才能访问,和Django中子应用类似
4. 一个项目中多个蓝图
函数名相同;先注册先访问
5. 使用蓝图构建项目
- 目录结构
6. 修改文件(运行项目)
- app/main/views.py(这个文件相当于视图,所有的函数存放文件)
- app/main/init.py(这个文件用来注册应用,实例化对象;使用蓝图)
- 在views中调用实例化对象,编写路由
- app/main/form.py(这个文件是写表单的)
- app/init.py(这个文件进行数据库的绑定app,收集路由,CSRF验证,加载配置项等,相当于main.py)
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import pymysql
from flask_restful import Api
from flask_migrate import Migrate
from flask_wtf import CSRFProtect ## 导入csrf保护
pymysql.install_as_MySQLdb()
csrf = CSRFProtect()
db = SQLAlchemy()
api = Api()
migrate =Migrate()
def Create():
"""
生成flask 配置文件
"""
app = Flask(__name__)
##
import sys
# print(sys.path)
import os
app.config.from_pyfile(os.path.join(sys.path[0],"settings.py")) ## 从配置文件中加载配置
app.config.from_object("settings.TestConfig") # 从类中加载配置
db.init_app(app) ### db = Sqlalchemy(app)
migrate.init_app(app)
api.init_app(app)
csrf.init_app(app)
from app.main import main
app.register_blueprint(main)
return app
- app/models.py(这个文件为模型类)
- project/manage.py(这个文件用于启动项目,数据库迁移等)
- project/settings.py(项目的配置文件)
import os
BASE_DIR = os.path.abspath(os.path.dirname(__file__))
STATIC_PATH = os.path.join(BASE_DIR,"static")
class Product:
SQLALCHEMY_COMMIT_ON_TEARDOWN = True ### 请求结束之后自动提交
SQLALCHEMY_TRACK_MODIFICATIONS = True ## 跟踪修改 flask 1.x 之后增加的配置项
class Config(Product):
## 正式环境的 配置
SQLALCHEMY_DATABASE_URI = "mysql://root:123123@localhost/flask" ##链接mysql 配置
SECRET_KEY = "fdshfkjdsjfheofhihfkfjl"
class TestConfig(Product):
## 测试环境的配置
SQLALCHEMY_DATABASE_URI = "mysql://root:123123@localhost/flask" ##链接mysql 配置
DEBUG = True
SECRET_KEY = "fdshfkjdsjfheofhihfkfjl"
7. 项目运行中使用restful获取的接口数据页面调用问题
- 在main/
__init__.py
下修改实例化对象 - 在views.py中使用路由