首页 > 其他分享 >Flask学习笔记(六)-蓝图 blueprint的基本使用

Flask学习笔记(六)-蓝图 blueprint的基本使用

时间:2022-09-27 22:44:38浏览次数:54  
标签:blueprint __ py Flask app 蓝图 admin user

一、前言

蓝图(blueprint)技术,可以帮助你实现flask应用的模块划分,在组织flask代码时,有两种模式,分别为功能式架构和分区式架构,使用蓝图,可以让项目架构更有层次,模块划分更便捷

Blueprint 具有以下属性

  • 一个项目可以具有多个 Blueprint
  • Blueprint 可以单独拥有自己的模板、静态文件的目录
  • 在应用初始化时,注册需要使用的 Blueprint

二、BluePrint 蓝图技术

未使用蓝图技术-flask应用

flask应用里,有一个user模块专门提供和用户有关的功能,例如用户注册,登录,登出,修改密码。还有一个admin模块,用来做后台管理,本示例只是为了向你展示如何在一个脚本里编写所有的模块,因此这些视图函数并没有具体的实现。

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello World!'
# user模块
@app.route('/user/register')
def register():
    return 'register'

@app.route('/user/login')
def login():
    return 'login'

@app.route('/user/modify_password')
def modify_password():
    return 'modify_password'


# admin模块
@app.route('/admin/alluser')
def alluser():
    return 'alluser'

@app.route('/admin/deluser')
def deluser():
    return 'deluser'

if __name__ == '__main__':
    app.run(port=5678)

这个应用多了两个模块,5个视图函数,这仍然是一个非常小的flask应用。在实践项目中,子模块和视图函数会非常的多,因此,不可能将他们都写在同一个脚本里,那样的话,这个脚本会非常的大,难以维护。  

1)【功能式架构】蓝图

(一个功能,一个模块组织成一个蓝图,他们共用相同的静态资源,静态资源放在static目录下)

常用功能式架构模型示例:

__init__.py
static/
templates/
    home/
    control_panel/
    admin/
views/
    __init__.py
    home.py
    control_panel.py
    admin.py
models.py

home, control_panel,admin 都是蓝图,他们共用static和 templates。

实战小案例(基于上面flask小应用-通过蓝图进行改造):

项目结构:

blue-example/
├── admin
│   ├── __init__.py
│   └── views.py
├── app.py
└── user
    ├── __init__.py
    └── views.py

app.py代码示例:

from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
    return 'Hello World!'
# 导入蓝图类
from admin.views import admin_blue
from user.views import user_blue
# 注册蓝图
app.register_blueprint(admin_blue)
app.register_blueprint(user_blue)

if __name__ == '__main__':
    app.run(port=5678)

admin目录下views.py示例:

# 导入蓝图
from flask import Blueprint
"""
实例化蓝图对象
第一个参数:蓝图名称
第二个参数:导入蓝图的名称
第三个参数:蓝图前缀,该蓝图下的路由规则前缀都需要加上这个
"""
admin_blue = Blueprint('admin', __name__, url_prefix='/admin')

# # 用蓝图注册路由-admin模块
@admin_blue.route('/alluser')
def alluser():
    return 'alluser'

@admin_blue.route('/deluser')
def deluser():
    return 'deluser'

user目录下views.py示例:  

from flask import Blueprint
user_blue = Blueprint('user', __name__, url_prefix='/user')
# user模块
@user_blue.route('/register')
def register():
    return 'register'

@user_blue.route('/login')
def login():
    return 'login'

@user_blue.route('/modify_password')
def modify_password():
    return 'modify_password'

运行结果:

 分别访问以下url进行测试:

http://127.0.0.1:5678/admin/alluser

http://127.0.0.1:5678/user/register

2)【分区式架构】蓝图

该模型适用于子模块有特殊需要的情况,在创建蓝图构造Blueprint对象时,可以指定static和templates, 其结构类似于下面这样 

yourapp/
    __init__.py
    admin/
        __init__.py
        views.py
        static/
        templates/
    home/
        __init__.py
        views.py
        static/
        templates/
    control_panel/
        __init__.py
        views.py
        static/
        templates/
    models.py 

  这种架构下dmin, home, control_panel有各自不同的页面样式和风格,需要配置不同的静态资源,两种架构根据项目实际情况灵活运用即可

  

  

 

标签:blueprint,__,py,Flask,app,蓝图,admin,user
From: https://www.cnblogs.com/xfbk/p/16736271.html

相关文章

  • flask-多app应用
    flask多app应用1、安装werkzeugpip3installwerkzeug==0.16.02、实例fromwerkzeug.wsgiimportDispatcherMiddlewarefromwerkzeug.servingimportrun_simple......
  • Flask 学习-79.Flask-RESTX 参数校验reqparse 解析器继承与更新
    前言通常我们会为每个资源创建不同的解析器,如果多个解析器直接有共同的参数,可以写一个包含所有共享参数的父解析器。然后使用copy()复制一个父类解析器同一个参数覆盖......
  • Flask学习笔记(五)-Flask通过Ajax传输JSON数据
    一.创建项目结构项目文件夹flask-ajax-demo,结构如下: 其中app.py是Python程序,user.html是静态页面。二.发起Ajax请求编写user.html,代码如下:<!DOCTYPEhtml><html......
  • Flask学习笔记(四)-Response对象+表单实例
    一、响应对象responseflask提供了Response最为视图最终返回的数据,但在代码编写过程中,我们通常很少直接使用Response对象,下面是几个常见的视图返回数据的方式fromflask......
  • Flask学习笔记(三)-jinja2 模板入门
    一、表达式jinja2是一个被广泛使用的模板引擎,其设计思想源自于django模板引擎,jinja2扩展了语法,增加了强大的功能,被flask选为内置的模板语言示例的目录结构如下./├─......
  • 【Python】【Flask】【字符串索引】计算人民币与美元的相互计算
    目录简介PythonCode导包设置首页计算的接口问题0:设置请求方式问题1:关于接收数据可能存在的问题问题2:返回结果启动完整代码HTMLCode问题分析分析:获取下拉列表框的选中值分......
  • Flask or Django?
    首先对于刚接触Python后端的新手先学哪一个?哪一个都可以!不要停留在原地,一旦决定了就一直坚持走下去!Flask容易入门,基本上在搭好开发环境的前提下花几个小时学习就可以算......
  • Flask 学习-78.Flask-SQLAlchemy 一对多关系
    前言一个人有多个收件地址,这就是一对多关系一对多(one-to-many)关系关系使用relationship()函数表示。然而外键必须用类sqlalchemy.schema.ForeignKey来单独声明:c......
  • 使用pychrm编写第一个Flask Web程序
    使用pychrm编写第一个FlaskWeb程序fromflaskimportFlaskapp=Flask(__name__)#实例化类[email protected]('/')#装饰器操作,实现URL地址defhello():......
  • Flask 学习-77.Flask-SQLAlchemy 一对一关系增删改查
    前言SQLAlchemy连接到关系型数据库,关系型数据最擅长的东西就是关系。一对一模型设计有个Student记录学生基本信息,Contact表记录学生联系方式,Student和Contact是一对一......