一、简介

面向对象的基本思想:多聚合、少继承、低(松)耦合、高内聚

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.pyfrom flask import Blueprint,render_template, requestadmin = 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.pyfrom flask import Blueprint, render_template, redirectuser = 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.pyfrom app import appfrom .user import userfrom .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__.pyadmin/__init__.pyviews.pystatic/templates/home/__init__.pyviews.pystatic/templates/control_panel/__init__.pyviews.pystatic/templates/models.py

参考:https://spacewander.github.io/explore-flask-zh/7-blueprints.html