Flask 中的蓝图构建,实现模块化路由

(备注:本篇和接下来大部分篇内容都是功能型文章,相对于理论性讲解会放在最后返回来一一讲解。)

 

当我们想除了入口文件之外的文件也能注册路由的时候,flask提供的蓝图就显得很重要了。

新建一个文件为testone

start.py:

#导入Flask
from flask import Flask


#实例化Flask
app = Flask(__name__)


from testone import testone
#app给蓝图注册路由
app.register_blueprint(testone)


#自定义返回信息
@app.route('/')
def index():
    return 'This is app'


#让Flask跑起来
app.run(debug=True)

testone.py:

from flask import Blueprint

#注册蓝图
testone = Blueprint('testone', __name__)


@testone.route('/one')
def one():
    return 'This is testone'

此时进行访问:

 

 

通常网页会展示给用户使用,和一个给管理员的管理后台,在蓝图的基础上就构建分为管理员和用户的视图函数模块。

 

start.py

#导入Flask
from flask import Flask


#实例化Flask
app = Flask(__name__)


from app.admin.views import admin
from app.user.views import user
#app给蓝图注册路由
app.register_blueprint(admin)
app.register_blueprint(user)


#自定义返回信息
@app.route('/')
def index():
    return 'This is app'


#让Flask跑起来
app.run(debug=True)

admin/views.py

from flask import Blueprint

#注册时候前缀,之后本文件的每一个路由都有
admin = Blueprint('admin',__name__,url_prefix='/admin')

@admin.route('/')
def index():
    return 'This is admin'

user/views.py

from flask import Blueprint

#注册时候前缀,之后本文件的每一个路由都有
user = Blueprint('user',__name__,url_prefix='/user')

@user.route('/')
def index():
    return 'This is user'

结果:

 

在规模越来越大的项目中,可能会出现分版本问题,这时候仅仅分管理员和用户就显得臃肿,蓝图需要再进行一次。

首先,我们要自己写一个小蓝图(作用是为了添加到后缀并且实现基本路由功能,然后再注册到蓝图上)

app/init.py(这个涉及比较底层一点的路由注册过程,把蓝图注册涉及的部分抽出来分部实现)

#定义一个小蓝图
class blueprint:
    #初始化
    def __init__(self,name):
        self.name = name
        self.mound = []
    def route(self,rule,**options):
        def decorator(f):
            self.mound.append((f,rule,options))
            return f
        return decorator
    #注册到蓝图中
    def register(self,bp,url_prefix=None):
        if url_prefix is None:
            url_prefix='/'+self.name
        for f,rule,options in self.mound:
            endpoint = self.name+'+'+options.pop("endpoint", f.__name__)
            bp.add_url_rule(url_prefix+rule,endpoint,f,**options)

接下来修改其他部分

admin/views.py

from app import blueprint

#注册时候前缀,之后本文件的每一个路由都有
admin = blueprint('admin')

@admin.route('/')
def index():
    return 'This is admin'

user/views.py

from app import blueprint

#注册时候前缀,之后本文件的每一个路由都有
user = blueprint('user')

@user.route('/')
def index():
    return 'This is user'

start.py

#导入Flask
from flask import Flask


#实例化Flask
app = Flask(__name__)



from app.v1 import create_views

views = create_views()

#app给蓝图注册路由
app.register_blueprint(views)


#自定义返回信息
@app.route('/')
def index():
    return 'This is app'


#让Flask跑起来
app.run(debug=True)

当你不想只是用一个view.py 文件的时候,可以在admin或者user下面新建py文件,注册小蓝图,然后在app/init.py蓝图再注册即可

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值