blueprint_blueprints - CSDN
精华内容
参与话题
  • 蓝图(blueprint)的理解和用法

    千次阅读 2018-07-30 13:45:51
    blueprint把不同功能的module分开。可以让应用模块化,针对大型应用。  蓝图的基本概念:在蓝图被注册到应用之后,所要执行的操作的集合。当分配请求时, Flask 会把蓝图和视图函数关联起来,并生成两个端点之前的...

    - 作用:

    blueprint把不同功能的module分开。可以让应用模块化,针对大型应用。 
    蓝图的基本概念:在蓝图被注册到应用之后,所要执行的操作的集合。当分配请求时, Flask 会把蓝图视图函数关联起来,并生成两个端点之前的 URL 。 
    比如只有一个run.py。有些功能需要多人分开来写,有些功能会有交错的可能,代码位置也不会在一起,这样可以用蓝图来开关一些模块(功能)和宏定义类似,但不是可插拔的应用而是一套可以注册在应用中的操作,并且可以注册多次。或者简单滴需要降低耦合,提高模块复用率。比如开发环境和应用环境的不同,可以用蓝图来切换环境。 
    蓝图的缺点是一旦应用被创建后,只有销毁整个应用对象才能注销蓝图。

    - Flask web的应用说明:


    在单脚本程序中,程序实例存在于全局作用域中,路由可以直接使用app.route修饰器定义。但现在程序在运行时创建,只有调用create_app()之后才能使用app.route修饰器,这时定义路就太晚了。蓝本和程序类似,也可以定义路由。不同的是,在蓝本中定义的路由处于休眠状态,直到蓝本注册到程序上后,路由才真正成为程序的一部分。使用位于全局作用域中的蓝本时,定义路由的方法几乎和单脚本程序一样。为了获得最大的灵活性,程序包中创建了一个子包,用于保存蓝本。

    - Flask web里蓝图示例

    app/main/init.py:创建蓝图

    from flask import Blueprint
    main = Blueprint('main', __name__)#两个必要参数'main'蓝图名字;'__name__'蓝图所在的模块或者包,一般为'__name__'变量
    #实例化一个Blueprint 类对象创建蓝图
    from . import views, errors

    app/init.py:注册蓝本

    def create_app(config_name):
    # ...
    from .main import main as main_blueprint
    app.register_blueprint(main_blueprint)
    return app

    app/main/errors.py:蓝本中的错误处理程序

    from flask import render_template
    from . import main
    @main.app_errorhandler(404)
    def page_not_found(e):
    return render_template('404.html'), 404
    @main.app_errorhandler(500)
    def internal_server_error(e):
    return render_template('500.html'), 500

    app/main/views.py:蓝本中定义的程序路由

    from datetime import datetime
    from flask import render_template, session, redirect, url_for
    from . import main
    from .forms import NameForm
    from .. import db
    from ..models import User
    @main.route('/', methods=['GET', 'POST'])
    def index():
    form = NameForm()
    if form.validate_on_submit():
    # ...
    return redirect(url_for('.index'))
    return render_template('index.html',
    form=form, name=session.get('name'),
    known=session.get('known', False),
    current_time=datetime.utcnow())

    - 用法:

    如果使用errorhandler 修饰器,那么只有蓝本中的错误才能触发处理程序。即修饰器由蓝本提供。要想注册程序全局的错误处理程序,必须使用app_errorhandler。

    创建 URL用法: 
    Flask 会为蓝本中的全部端点加上一个命名空间,这样就可以在不 
    同的蓝本中使用相同的端点名定义视图函数,而不会产生冲突。(跨蓝本) 
    在单脚本程序中:index() 视图函数的URL 可使用 
    url_for(‘index’) 
    在蓝图中:index() 视图函数的URL 可使用 
    url_for(‘main.index’) 
    另外,如果在一个蓝图的视图函数或者被渲染的模板中需要链接同一个蓝图中的其他端点,那么使用相对重定向,只使用一个点使用为前缀。简写形式(命名空间是当前请求所在的蓝本): 
    url_for(‘.index’)

    展开全文
  • Blueprint入门

    千次阅读 2013-01-28 15:31:50
    Blueprint是个好框架,本教程会深入介绍你可以用它来做什么,也会说到什么时候不适合用。 Blueprint简介 Blueprint是一个CSS框架,为减少开发时间而设计。它可以构架起有坚实基础的CSS,其中包含合理的排版...

    Blueprint是个好框架,本教程会深入介绍你可以用它来做什么,也会说到什么时候不适合用。

    Blueprint简介

    Blueprint是一个CSS框架,为减少开发时间而设计。它可以构架起有坚实基础的CSS,其中包含合理的排版(typography)、可定制的网格(grid)、打印样式等。

    但是Blueprint不是银弹,它适用于每个页面都需要独特的设计。在决定使用Blueprint前建议先看看Blueprint例子以决定是否适合你。你可以检出tests目录,里面例子展示大部分Blueprint样式。

    “框架”这个词也许有些误导,Blueprint并不会建议你如何组织你的CSS文件。它更像一个工具箱,你可以从中选出你需要的。

    结构概述

    自下而上的看Blueprint:

    CSS布局: CSS reset: 移除浏览器的默认规则。 Typography: 默认提供一些漂亮的排版和颜色。 Grid: 提供一组样式来制作网格。

    第二部分是脚本。你可以它来自定义框架,可以是列数、宽度等外观,还可以是路径、命名空间等。我们有两个脚本: 1. Compressor: 用于压缩和自定义源文件。 2. Validator: 用于验证Blueprint核心文件。

    以上是简单介绍,接下来让我们进入细节。首先,我们看看CSS部分。然后我们再介绍脚本,以及如何通过它数和自定制框架。

    设置Blueprint

    为了使用Blueprint,你必须包含以下三个文件在你的HTML中:

    • blueprint/screen.css: 主要文件,页面展示的样式都在里面。
    • blueprint/print.css: 用于打印。
    • blueprint/ie.css: 用于IE浏览器下的校正。

    在HTML中嵌入下面代码来引用(请确认路径正确):

    1
    2
    3
    4
    5
    
    <link rel="stylesheet" href="css/blueprint/screen.css" type="text/css" media="screen, projection" />
    <link rel="stylesheet" href="css/blueprint/print.css" type="text/css" media="print" /> 
    <!--[if lt IE 8]>
      <link rel="stylesheet" href="css/blueprint/ie.css" type="text/css" media="screen, projection" />
    <![endif]-->

    (原文提示XHTML需要用”/>”结束标签,上面代码中我已经直接加上了)

    使用Blueprint里的CSS

    之前已经提过,Blueprint有三个布局,前两个布局,CSS reset和默认排版用于设置默认HTML样式。所以你不需要更改这两个文件。如果你想更改全局字体大小等,建议你写在自己的CSS文件里,以便将来更新Blueprint版本。

    排版相关class

    While the typography of Blueprint mainly applies itself, there’s a few classes provided. 下面是一个它们名字的列表和介绍它们的作用:

    .hide 隐藏元素
    .quiet 使字体颜色柔和
    .loud 黑色字体
    highlight 黄色背景
    .added 绿色背景
    .removed 红色背景
    .first 移除左侧margin/padding
    .last 移除右侧margin/padding
    .top 移除顶部margin/padding
    .bottom 移除底部margin/padding

    表格样式

    Blueprint可以通过给输入元素加.text.title类来控制,其中.text表示普通大小,.title提供一个大字体的输入框。

    这里还有一些类可以用于成功或失败信息:

    div.error 建议一个失败框(红色)。
    div.notice 建议一个提示框(黄色)。
    div.success 建议一个成功框(绿色)。

    建立网格

    第三个布局是网格,是一个给你网站建立各样网格的工具。记住网格背后的大部分CSS都可以自定义(下面会讲到)。在这个部分我会使用默认设置。

    默认网格有24列,每列宽30px,边距(margin)10px。总共宽为950px,适合1024x768的分辨率。如果你想要更窄的设计,可以看下面自定义网格一节。

    怎么用Blueprint来建立网格呢?新建一个<div/>来代表一列,并且给它加一个.span-x的class。比如,如果你想要一个三列的布局,两窄一宽,并且包含头尾,可以参考下面的代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    <div class="container">
      <div class="span-24">
        头部
      </div>
    
      <div class="span-4">
        第一列
      </div>
      <div class="span-16">
        中间列
      </div>
      <div class="span-4 last">
        最后一列
      </div>
     
      <div class="span-24">
        尾部
      </div>
    </div>

    此外,还有两个class你应该知道。首先,每个Blueprint页面应该包含在一个class为.container的div里,一般紧跟在body标签后。

    第二,每行的最后一列(默认24列),应该用class.last来移除右侧的边距(margin)。可以参考tests/parts/里的例子。这些文件告诉了你Blueprint的网格能做些什么。

    这里是一个其他网格相关class的快速概述:
    .append-x 附加(在后面加)x条空列。
    .prepend-x 追加(在前面)x条空列。
    .push-x 推送x列到左侧。可用于切换列。
    .pull-x 推送x列到右侧。可用于切换列。
    .border 列右侧加分界线。
    .colborder 建立新列,分界线在中部。
    .clear 换行,无论是否有空。
    .showgrid 给容器或列添加后能看见网格和基线。

    在这个列表中,x用于append/prepend时范围是1-23,用于push/pull时是1-24。如果你自定义了新的列数,这个范围会随之变化。

    下面是另一个例子,包含4列等宽,前两列间有分界线,后两列间也有,4列的中间有段空白。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    <div class="container">
      <div class="span-5 border">
        第一列
      </div>
      <div class="span-5 append-4">
        第二列
      </div>
      <div class="span-5 border">
        第三列
      </div>
      <div class="span-5 last">
        第四列
      </div>
    </div>

    你也可以通过嵌套列来实现想要的布局。下面例子展现的是页面左半部有四个长方形,两上两下,右半部有一个长方形。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    <div class="container">
      <div class="span-12">
        <div class="span-6">
          左上
        </div>
        <div class="span-6 last">
          右上
        </div>
        <div class="span-6">
          左下
        </div>
        <div class="span-6 last">
          右下
        </div>
      </div>
      <div class="span-12 last">
        另一块
      </div>
    </div>

    如果不理解可以在浏览器里尝试上面的代码。想看更过的如何使用class的例子,请看/tests/parts/grid.html

    脚本

    Blueprint有两个脚本:一个用于压缩和自定义CSS,另一个是验证核心CSS文件,以免你修改了某些文件。

    验证器(The Validator)

    验证器的工作很简单——检查Blueprint核心CSS里的文件。脚本使用配套版本的W3C CSS验证器来完成。为了运行,你需要安装Ruby。然后你可以运行$ ruby validate.rb

    请注意Blueprint有几个验证错误。它们是已知的,来自于几个为了保持浏览器一致性的CSS hack。

    压缩器(The Compressor)

    你的HTML里引用压缩版的核心CSS文件时,当你做过修改,需要重新压缩。这是压缩器脚本的作用。

    另外,你可以在这里自定义网格。为了自定义网格,需要使用一个特殊的设置文件,当你运行压缩器时,就会生成新的CSS。新压缩的文件将会使用你的设置。

    你之需要重新运行脚本来重新压缩。这会解析核心CSS文件并在blueprint文件夹里生成新文件。与验证器一样,需要安装Ruby。在lib目录里执行$ ruby compress.rb

    执行这个文件会将blueprint/src下的文件合并成三个文件:ie.cssprint.cssscreen.css
    但是你可以通过加参数来改变行为。执行$ ruby compress.rb -h查看你可以使用的基本参数。

    自定义设置

    你可以阅读lib/compress.rb里的文档来学习如何自定义设置。

    参考

    Blueprint CSS Framework Tutorial(官方原文)
    官网
    Demo

    转自:http://fancyoung.com/blog/blueprint-tutorial/

    展开全文
  • OSGI中blueprint简介

    万次阅读 2016-07-04 07:56:38
    OSGI中blueprint简介上篇博文我们开始了felix中的一个example编写,原本计划是讲felix中的几个example全部编写一遍,但是随后发现felix的这几个example都差不多,只是略微有些区别,编写来编写去始终都是这几行代码...

    OSGI中blueprint简介


    上篇博文我们开始了felix中的一个example编写,原本计划是讲felix中的几个example全部编写一遍,但是随后发现felix的这几个example都差不多,只是略微有些区别,编写来编写去始终都是这几行代码,讲起来也没什么意思,想着还是开始osgi中新的东西的讲解,思考来去,还是从blueprint开始。


    blueprint简介

    在osgi中服务的使用有多种方式,如使用传统的注册式服务,就是我们之前中example不断使用的使用方式,还是osgi中的声明式服务,还有著名的ipojo等等,但在这里值得花一番笔墨来讲解的应该是blueprint,说到blueprint,务必需要提及一下spring,在个人印象中,spring框架几乎成为了java这么多框架中最为有名的一个,传统上提出的ssh,几乎就只剩下spring一个还非常强力的存活着,而且本身提供的功能也越来越丰富,子项目中springboot也快成为业界微服务一大选择,而在osgi中,spring最初也有所涉及,为spring dm,blueprint产生的规范便是起源于spring dm,随后好像spring dm没有继续发展,但是blueprint却是一直存在目前,Blueprint规范主要有两个实现:Aries blueprint和Gemini blueprint,它们分别来自Apache和Eclipse两个开源组织。我们日后讲的基本都是Apache官网中的blueprint,具体的地址如下:apache blueprint,讲的时候基本不会单独讲解blueprint,会将其他一些东西串起来讲出来,具体到日后讲解其他的时候再说。


    blueprint使用

    blueprint的使用上有些意思,在resource目录下,需要先创建OSGI-INF/blueprint两级目录,然后在里面建立相关的xml文件,在此xml文件的名字不需要固定,也可以为多个,只要在此目录,均会被加载,个人在编写osgi应用时,一般在此目录下会建立两个xml文件,一个为普通的blueprint.xml用于管理我们的服务,另外一个则是暴露对外的接口,为blueprint-cxf.xml,这个在日后一起讲解出来。现在blueprint大致的用法如下所示,其实与spring配置xml文件区别并不是太大:

    <?xml version="1.0" encoding="UTF-8"?>
    <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.2.0"
               xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">
    
    
    </blueprint>

    其中,在该xml文件中,可以配置bean、service、command等等,在我们前几次编写的felix example中,
    其中多次用到DictionService就可以不再使用注册式服务,而使用blueprint进行相关的配置了,如下所示:

        <bean id="DictionaryService" class="cn.com.service.DictionaryServiceImpl" />
    

    这是最简单的bean的配置,这种配置方法有多种,在此不讲这么多的使用方式,在另一篇文章中,讲了多种service的使用方法,与此类似,有兴趣可以看一下:blueprint service,在此需要讲一下service和bean的区别,两者看上去几乎一模一样,但是却是用了两种不同的配置方法,原因是bean这种是在bundle内部使用,不暴露对外,但是service是一个bundle提供给另外一个bundle使用,比如A interface在A bundle中,A实现类在B bundle中,c Bundle需要使用A interface提供的服务,就可以使用service来配置服务。


    配置服务的使用

    在我们进行了以上bean的配置之后是需要进行使用这个服务的,Activator中这种启动Bundle中获取服务的方式不再使用,在此使用注入的服务,如下所示:

    <bean id="HelloRestService" class="cn.com.service.impl.HelloRestServiceImpl">
            <property name="dictionaryService" ref="dictionaryService" />
     </bean>
    

    在程序代码中的使用则是:

    public class HelloRestServiceImpl {
    
        private DictionaryService dictionaryService;
    }
    

    如此即可正常使用,无需如同spring框架需要加上@Inject注解单独注入。


    总结

    blueprint在使用上,借用infoq的一篇文章来描述一下,Blueprint是针对OSGi的依赖注入解决方案,用法非常类似Spring。当使用服务的时候,Blueprint会马上创建并注入一个代理(Proxy)。对这些服务进行调用时,如果服务在当前不可用的话,将会产生阻塞,直至能够获取到服务或超时。如果一直阻塞下去,那么当前bundle的启动一直会处于STARTING状态,造成服务一直无法正常启动,需要卸载当前bundle处理当前情况。
    当然日后如果遇到这种情况,可以具体再进行分析,在此略去不提,本次的blueprint讲解就到这里,具体使用,我们到下一篇博文中再进行讲解。

    展开全文
  • flask框架Blueprint的简单使用

    千次阅读 2019-09-08 11:19:59
    简单来说,Blueprint 是一个存储操作方法的容器,这些操作在这个Blueprint 被注册到一个应用之后就可以被调用,Flask 可以通过Blueprint来组织URL以及处理请求。 Flask使用Blueprint让应用实现模块化,在Flask中,...

    Blueprint概念

    简单来说,Blueprint 是一个存储操作方法的容器,这些操作在这个Blueprint 被注册到一个应用之后就可以被调用,Flask 可以通过Blueprint来组织URL以及处理请求。

    Flask使用Blueprint让应用实现模块化,在Flask中,Blueprint具有如下属性:

    一个应用可以具有多个Blueprint
    可以将一个Blueprint注册到任何一个未使用的URL下比如 “/”、“/sample”或者子域名
    在一个应用中,一个模块可以注册多次
    Blueprint可以单独具有自己的模板、静态文件或者其它的通用操作方法,它并不是必须要实现应用的视图和函数的
    在一个应用初始化时,就应该要注册需要使用的Blueprint
    但是一个Blueprint并不是一个完整的应用,它不能独立于应用运行,而必须要注册到某一个应用中。

    使用蓝图的步骤

    1,创建一个蓝图对象
    2,在这个蓝图对象上进行操作,注册路由
    3,在应用对象上注册这个蓝图对象

    随着flask程序越来越复杂,我们需要对程序进行模块化的处理,比如将一个功能的许多路由写到另一个文件中(admin.py文件)。以两个python文件为例

    源程序app.py文件:
    from flask import Flask
    
    app=Flask(__name__)
    
    @app.route('/')
    def index():
        return 'index'
    
    #3.在应用对象上注册这个蓝图对象
    from admin import *
    app.register_blueprint(index_blue)
    
    
    if __name__=='__main__':
        app.run()
    
    
    admin.py文件
    
    #1创建一个蓝图对象
    from flask import Blueprint
    index_blue = Blueprint("admin",__name__)	
    
    
    #2注册路由
    #@app.route('/edit')改为
    @index_blue.route('/edit')
    def edit():
        return 'edit'
    
    """
    index_blue = Blueprint("admin",__name__)
    两个必要参数'admin'蓝图名字;'__name__'蓝图所在的模块或者包,一般为'__name__'变量
    
    index_blue = Blueprint('admin', __name__, url_prefix='/admin')
    #为url添加前缀,url为/admin/edit才能访问edit()函数
    
    index_blue = Blueprint("admin",__name__,static_folder='static_admin')
    #访问静态文件。使用/static_admin/*** 访问static_admin目录下的静态文件
    
    index_blue = Blueprint("admin",__name__,static_folder='static_admin',static_url_path='/lib')
    #使用 static_url_path 来改变静态目录的路由。 访问路径为/lib/***
    
    index_blue = Blueprint('admin',__name__,template_folder='my_templates')
    #设置模板目录
    """
    
    展开全文
  • BluePrint 如何理解

    千次阅读 2014-09-15 19:31:02
    Blueprint,极其类似Spring,实际上,这两个规范的源头是一个。   Blueprint是一个实现了osgi规范的,注入性依赖容器的,配置规范。 Blueprint对于Servicemix的作用,好比,spring对于web开发框架的作用:...
  • Blueprint 模块化 随着flask程序越来越复杂,我们需要对程序进行模块化的处理,针对一个简单的flask程序进行模块化处理 举例来说: 我们在一个py文件中写入了很多路由, from flask import Flask ...
  • 前言: 随着android工程越来越大,包含的module越来越多,以makefile组织的项目编译花费的时间越来越多。谷歌在7.0开始引入了ninja进行编译系统的组织。相对于make来说Ninja 在大的项目管理中速度和并行方面有突出...
  • UE4:快速入门蓝图(Blueprint)的方法之一   前言: 不久前因为工作的需要,学习了一下UE4的蓝图,发现并没有想象中的那么难以入门。今天把入门的方法和大家分享:D   适读人群: 1 有一定编程基础,对游戏...
  • blueprint的基本使用

    千次阅读 2018-09-04 11:47:31
    什么是blueprint,蓝图,就是将大型的项目,分层解耦模块化。 代码和模块都得解耦。 示例代码: from flask import render_template from flask import Blueprint #第一步先引入 user_bp = Blueprint('user',__...
  • BluePrint

    2020-04-23 18:29:20
    假设有多个视图模块view.py, view2.py, ....., viewn.py,且只有view.py有主函数,...from flask import Blueprint view2 = Blueprint('view2',__name__) @admin.route("/") def index(): return "I am view2"...
  • Blueprint

    2018-06-15 19:57:15
    作用:对项目进行模块化,方便对代码的管理,把一部分其它功能的视图函数抽取到其它模块上,而要让这些视图函数也能运行,就要用蓝图来实现。如下面,将manager里面的视图函数抽取到cart模块里面。...
  • Python进阶(四十九)-初识Flask Blueprint

    万次阅读 多人点赞 2020-09-23 10:42:12
    Python进阶(四十九)-初识Flask Blueprint  在进行Python Web开发时选择Flask框架。项目模块划分阶段,使用Blueprint(这里暂且称之为“蓝本”)。Blueprint通过把实现不同功能的module分开,从而把一个大的...
  • blueprint

    2008-03-10 12:19:00
    Silverlight Blueprint for SharePoint,是一个为开发人员提供了怎样利用Silverlight和SharePoint的产品技术整合,为企业应用和互联网的网站提供服务。Silverlight的展示是通过SharePoint 的WebParts作为接口,调用...
  • Blueprint教程

    千次阅读 2011-12-29 15:55:58
    Blueprint CSS Framework Tutorial Blueprint是个好框架,本教程会深入介绍你可以用它来做什么,也会说到什么时候不适合用。 Blueprint简介 Blueprint是一个CSS框架,为减少开发时间而设计。它可以构架起有坚实...
  • Blueprint编译过程

    千次阅读 2014-09-28 09:39:47
    Blueprint 编译概述 一、术语 Blueprint,像C++语言一下的,在游戏中使用前需要编译。当你在BP编辑器中,点击编译按钮时候,BP资源开始把属性和图例过程转换为一个类对象处理。 1. FKismetCompilerContext ...
  • 5.1 蓝图Blueprint

    2019-07-05 00:08:59
    为什么学习蓝图? 我们学习Flask框架,是从写单个文件,执行hello world开始的。我们在这单个文件中可以定义路由、视图函数、定义模型等等。但这显然存在一个问题:随着业务代码的增加,将所有代码都放在单个程序...
  • Flask Blueprint

    2019-07-10 19:38:12
    Blueprint简介 Blueprint它是Flask项目的一种组件式开发,可以在一个应用内或跨越 多个项目共用蓝图。使用蓝图可以极大地简化大型应用的开发难度,也为Flask扩展 提供了一种在应用中注册服务的集中式机制。 模块化...
  • 对于习惯使用RESTful API的同志们来说,使用Blueprint可以快速的写出高雅大气的文档:下面以一个Github中的Gist服务为例,简单的演示一下Blueprint的应用。原文地址:http://blog.callmewhy.com/2014/
  • 摘要:Blueprint解析Android.bp到ninja的代码流程时如何走的? 阅读本文大约需要花费18分钟。 文章首发微信公众号:IngresGe 专注于Android系统级源码分析,Android的平台设计,欢迎关注我,谢谢! 欢迎关注我...
  • Flask之Blueprint

    千次阅读 2017-09-11 12:24:00
    Blueprint Blueprint继承自_PackageBoundObject类 class Blueprint(_PackageBoundObject): warn_on_modifications = False _got_registered_once = False def __init__(self, name, import_name, sta
1 2 3 4 5 ... 20
收藏数 14,182
精华内容 5,672
热门标签
关键字:

blueprint