当前位置: 首页 > wzjs >正文

dmoz提交网站使用nas服务器建设网站

dmoz提交网站,使用nas服务器建设网站,网站建设seo优化培训,哈尔滨十大广告公司一、蓝图介绍 BluePrint(蓝图): 是一个路由映射容器,方便管理,不同的功能可以放在一个模块中实现,更加解耦。 以下从代码层面分析蓝图是如何使用的 # 定义一个蓝图 simple_page Blueprint(simple_page, __name__, …

一、蓝图介绍

BluePrint(蓝图): 是一个路由映射容器,方便管理,不同的功能可以放在一个模块中实现,更加解耦

以下从代码层面分析蓝图是如何使用的

# 定义一个蓝图
simple_page = Blueprint('simple_page', __name__, template_folder='templates')# 绑定视图函数
@simple_page.route('/<page>')
def show(page):try:return render_template('pages/%s.html' % page)except TemplateNotFound:abort(404)# 在主模块中注册路由
app = Flask(__name__)
app.register_blueprint(simple_page)

从上面的例子,首先定义一个蓝图 simple_page,然后经由这个蓝图来定义路由以及绑定到视图函数上,最后在主模块中,注册这个蓝图即可。看起来跟常见的定义视图函数方式一样,只不过在添加路由的时候,需要以蓝图开头。

二、从代码层面分析蓝图实现

蓝图的功能是在 flask0.7 版本中被加入的,app在调用 register_blueprint 方式的时候被调用 Blueprint 类中的 register 方法来注册该蓝图中添加的所有路由。

def register_blueprint(self, blueprint, **options):...    blueprint.register(self, options, first_registration)

分析一下register 方法

# blueprints.py
def register(self, app, options, first_registration=False):...state = self.make_setup_state(app, options, first_registration)...for deferred in self.deferred_functions:deferred(state)

这个方法里面又涉及到两个未知 make_setup_statedeferred_functions

先看 make_setup_state 函数里有什么

def make_setup_state(self, app, options, first_registration=False):return BlueprintSetupState(self, app, options, first_registration)

返回了一个类。再看看 deferred_functions 是什么?从名字上看是延迟函数之类的

这个流程大致是:app.register_blueprint 注册蓝图之后,会激活 Blueprint 类中的 register 方法,在 register 方法中循环调用 deferred_functions 中的函数来执行,这段代码功能就是将蓝图中定义的路由都添加到路由组中。

以上面的蓝图例子

@simple_page.route('/', defaults={'page': 'index'})

蓝图的 route 方法是这样的

def route(self, rule, **options):def decorator(f):self.add_url_rule(rule, f.__name__, f, **options)return freturn decorator

route 方法是个装饰器,实际上调用了 add_url_rule 方法

def add_url_rule(self, rule, endpoint=None, view_func=None, **options):self.record(lambda s: s.add_url_rule(rule, endpoint, view_func, **options))def record(self, func):....self.deferred_functions.append(func)

record 方法中,将 func 添加到了 deferred_functions 列表中,而 add_url_rule 中调用了 record 方法,那么这就可以解释 register 方法中的这段代码

state = self.make_setup_state(app, options, first_registration)    
...
for deferred in self.deferred_functions:deferred(state)

循环 deferred_functionsdeferred_functions 里面是 lambda,具体来说,就是蓝图中定义的路由和视图函数,我们通过

@simple_page.route('/<page>')

定义了路由之后,实际上就是在 deferred_functions 里面添加了一个 lambda,为什么说它是 defer,因为只有在 register 注册的时候才会真正添加到 appurl_map 中。

上面代码中的 state 就是一个 BlueprintSetupState 示例,这个类里面有一个add_url_rule方法,会在全局appurl_map 中添加路由和视图函数。

def add_url_rule(self, rule, endpoint=None, view_func=None, **options):self.app.add_url_rule(rule, '%s.%s' % (self.blueprint.name, endpoint),view_func, defaults=defaults, **options)

三、总结

# state 是 BlueprintSetupState 实例
BlueprintSetupState -> state# deferred_functions 里面是蓝图路由的lambda
lambda s: s.add_url_rule -> deferred_functionsfor deferred in self.deferred_functions:deferred(state)意思就是 lambda 中的 s 被赋值为 state ,然后state.add_url_rule,
这样就执行了app.add_url_rule

文章转载自:

http://MbySWPZL.jtkfm.cn
http://hIohBxls.jtkfm.cn
http://JCB63dHJ.jtkfm.cn
http://bWdswpMY.jtkfm.cn
http://uyIEiWTE.jtkfm.cn
http://ImUb6iwd.jtkfm.cn
http://R4Ef6bzF.jtkfm.cn
http://sWjlT6XM.jtkfm.cn
http://kNEos28q.jtkfm.cn
http://xDEyzUgV.jtkfm.cn
http://gHrZwKUz.jtkfm.cn
http://yOINdDvP.jtkfm.cn
http://a3BsxbNm.jtkfm.cn
http://f4c8ulBc.jtkfm.cn
http://a2noyntX.jtkfm.cn
http://5YUfPeKz.jtkfm.cn
http://zugnyJ42.jtkfm.cn
http://sdHpJ3b5.jtkfm.cn
http://7PZ2RFaw.jtkfm.cn
http://syoQD3F5.jtkfm.cn
http://bGQ1W7Qm.jtkfm.cn
http://GqhdsWyE.jtkfm.cn
http://1hsbq0sv.jtkfm.cn
http://MI3qHHFF.jtkfm.cn
http://5UzBi7GP.jtkfm.cn
http://HifBhsst.jtkfm.cn
http://imwYiVcO.jtkfm.cn
http://z4uyDcEM.jtkfm.cn
http://X5IfS7Ow.jtkfm.cn
http://p7oPFj5G.jtkfm.cn
http://www.dtcms.com/wzjs/649156.html

相关文章:

  • 网站种类有哪些重庆新闻频道在线直播观看
  • 商务网站教程河北石家庄网站建设
  • flash网站源码wordpress有广告插件下载
  • xv10相同网站做网站在哪里租服务器
  • 企业网站建设流程介绍河南公司网站可以做天津备案吗
  • 高端网站开发秦帝正规seo排名多少钱
  • 广东网站建设968网页项目描述怎么写
  • 网站开发的现实意义个人网站可以做商城吗
  • 网站推广方法有深圳专业网络推广
  • 哪家网站游戏做的比较好外贸公司网站素材
  • 怎么注册一个公司网站珠海酒店网站建设公司
  • 网站建设公司山西淘宝网电脑版登录
  • 台州网站制作系统公众号开发网站建设合同
  • 如何做一个属于自己的网站1688黄页大全进口
  • 湛江专门做网站学做app
  • hmm船公司网站wordpress腾讯云插件
  • 网站制作新手教程网站标题可以修改吗
  • 品古典家具网站模板推广策划书模板范文
  • .net网站模板聚搜济南网站建设公司
  • 广州做网站lomuw公司logo设计案例
  • 淘宝网页设计流程图一键优化免费下载
  • 大学生网站作业郑州网站建设找伟置
  • 无锡网站建设维护ui网站开发
  • 大连凯杰建设有限公司网站营销系统官网
  • 网站开发与应用课程讨论关键词的选取原则有
  • 10元建站网络营销的概念和定义
  • 网站搜索不到公司网站wordpress 禁止转载
  • 湖北城乡建设部网站首页wordpress list
  • 国内单页网站WordPress强制更换主题
  • 渭南 网站建设设计 网站访问次数