Flask blueprint
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flask blueprint相关的知识,希望对你有一定的参考价值。
一、简介面向对象的基本思想:多聚合、少继承、低(松)耦合、高内聚
1、django的松耦合:体现在url和视图函数之间,两个之间的更改不需要依赖于对方内部构造
2、flask的blueprint:(蓝图/蓝本)定义了可应用于单个应用的视图,模板,静态文件的集合,将应用组织成了不同的组件;我理解上就是模块化,独立。
比喻举例
情景一:两个人去吃麻辣香锅,点一锅上来,简单方便吃的津津有味
【两个人开发的一个系统,放在一个文件内,传送拷贝方便,也很好理解沟通】
情景二:有一天同学聚餐,六十多人,点好几大锅,里边什么都有,那就尴尬了,有的人不吃辣,有的人不吃这不吃那,一个菜一个碗区分开大家好弄
【六十个人开发系统,同时从100行编辑文件,提交上去合并时就0疼了,各部分独立出来,各自修改自己的部分,就显得很和平了】
二、小案例
1:原始视图:
# views.py
#!/usr/local/bin/python3
# -*- encoding: utf-8 -*-
from app import app
@app.route(‘/user/index‘)
def index():
return ‘user_index‘
@app.route(‘/user/show‘)
def show():
return ‘user_show‘
@app.route(‘/user/add‘)
def add():
return ‘user_add‘
@app.route(‘/admin/index‘)
def adminindex():
return ‘admin_index‘
@app.route(‘/admin/show‘)
def adminshow():
return ‘admin_show‘
@app.route(‘/admin/add‘)
def adminadd():
return ‘admin_add‘
#上面6个视图,分别对应admin,user两个用户的三个功能,index、add、show
#如果admin、user不止三个功能,几百个,几千个,那仅view的代码就不可review和维护了
#如果多个人同时开发admin,同时写代码提交,版本控制就会城灾难
#如果我们要弃用admin功能块,那我们要删除多少行
2、使用蓝图使之pythonic
# admin.py
from flask import Blueprint,render_template, request
admin = Blueprint(‘admin‘, __name__)
@admin.route(‘/index‘)
def index():
return render_template(‘admin/index.html‘)
@admin.route(‘/add‘)
def add():
return ‘admin_add‘
@admin.route(‘/show‘)
def show():
return ‘admin_show‘
# user.py
from flask import Blueprint, render_template, redirect
user = Blueprint(‘user‘,__name__)
@user.route(‘/index‘)
def index():
return render_template(‘user/index.html‘)
@user.route(‘/add‘)
def add():
return ‘user_add‘
@user.route(‘/show‘)
def show():
return ‘user_show‘
# views.py
from app import app
from .user import user
from .admin import admin
#注册蓝图并且设置request url条件
app.register_blueprint(admin,url_prefix=‘/admin‘)
app.register_blueprint(user, url_prefix=‘/user‘)
#现在再来回答上面三个问题就好回答了吧
三、设计架构
个人:大型应用先用 分区式,每个分区式内用功能式
功能式架构
yourapp/
__init__.py
static/
templates/
home/
control_panel/
admin/
views/
__init__.py
home.py
control_panel.py
admin.py
models.py
分区式架构
官方是这么说的:像常规的应用一样,蓝图被设想为包含在一个文件夹中。当多个蓝图源于同一个文件夹时,可以不必考虑上述情况,但也这通常不是推荐的做法。
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
参考:https://spacewander.github.io/explore-flask-zh/7-blueprints.html
以上是关于Flask blueprint的主要内容,如果未能解决你的问题,请参考以下文章
我是否必须锁定Blueprint实例以避免Flask中的竞争条件?