• Flask: 常用拓展


    Flask-Script

    Flask-Script 是一个 Flask 扩展, 为 Flask 程序添加了一个命令行解析器。

    安装

    $ pip install flask-script
    

    使用

    from flask-script import Manager
    manager = Manager(app)
    
    #...
    
    if __name__=='__main__':
        manager.run()
    
    (flask) $ python hello.py 
    usage: hello.py [-?] {shell,runserver} ...
    
    positional arguments:
      {shell,runserver}
        shell            Runs a Python shell inside Flask application context.
        runserver        Runs the Flask development server i.e. app.run()
    
    optional arguments:
      -?, --help         show this help message and exit
    

    运行Web服务器:

    (flask) $ python hello.py runserver
     * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
    
    

    Flask-Bootstrap

    Bootstrap 是 Twitter 开发的一个开源框架,它提供的用户界面组件可用于创建整洁且具有吸引力的网页,而且这些网页还能兼容所有现代 Web 浏览器。

    Bootstrap 是客户端框架,因此不会直接涉及服务器。服务器需要做的只是提供引用了 Bootstrap 层叠样式表(CSS)和 JavaScript 文件的 HTML 响应, 并且 HTML、CSS 和 JavaScript 代码中实例化所需组件。这些操作最理想的执行场所就是模版。

    Flask-Bootstrap 可以在程序中集成 Bootstrap

    安装

    $ pip install flask-bootstrap
    

    使用

    Flask 扩展一般都在创建程序实例时初始化。

    from flask_bootstrap import Bootstrap
    
    #...
    
    bootstrap = Bootstrap(app)
    

    初始化 Flask-Bootstrap 之后,就可以在程序中使用一个包含所有Bootstrap 文件的基模版。这个模版利用 Jinja2 的模版继承机制,让程序扩展一个具有基本页面结构的基模版,其中就有用来引入 Bootstrap 的元素。

    {% extends "bootstrap/base.html" %}
    
    {% block title %}Flasky{% endblock %}
    
    {% block navbar %}
    <div class="navbar navbar-inverse" role="navigation">
    	<div class="container">
    		<div class="navbar-header">
    			<button type="button" class="navbar-toggle"
    			data-toggle="collapse" data-target=".navbar-collapse">
    				<span class="sr-only">Toggle navigation</span>
    				<span class="icon-bar"></span>
    				<span class="icon-bar"></span>
    				<span class="icon-bar"></span>
    			</button>
    			<a class="navbar-brand" href="/">Flasky</a>
    		</div>
    		<div class="navbar-collapse collapse">
    			<ul class="nav navbar-nav">
    				<li><a href="/">Home</a></li>
    			</ul>
    		</div>
    	</div>
    </div>
    {% endblock %}
    
    {% block content %}
    <div class="container">
    	<div class="page-header">
    		<h1>Hello, {{ name }}!</h1>
    	</div>
    </div>
    {% endblock %}
    

    Jinja2 中的 extends 指令从 Flask-Bootstrap 中导入 bootstrap/base.html,从而实现模版继承。Flask-Bootstrap 中的基模版提供了一个网页框架,引入了 Bootstrap 中的所有 CSS 和 JavaScript 文件。

    基模版中定义了可在衍生模版中重定义的块。blockendblock 指令定义的块中的内容可添加到基模版中。

    上面这个示例定义了3个块,分别名为 titlenavbarcontent。这些块都是基模版提供的,可在衍生模版中重新定义。

    Flask-Bootstrapbase.html 模块定义的可用块。

    块名 说明
    doc 整个HTML文档
    html_attribs <html> 标签的属性
    html <html> 标签的内容
    head <head> 标签的内容
    title <title> 标签的内容
    metas 一组 <meta> 标签
    styles 层叠样式表定义
    body_attribs <body> 标签的属性
    body <body> 标签的内容
    navbar 用户自定义的导航条
    content 用户定义的页面内容
    scripts 文档底部的 JavaScript 声明

    注意:上表中很多块都是 Flask-Bootstap 自用的, 如果直接重定义可能会导致一些问题。如果程序需要向已经有内容的块中添加新内容, 必须使用 Jinja2 提供的 super() 函数。例如,如果要在衍生模版中添加新的 JavaScript 文件,需要这么定义:

    {% block scripts %}
    {{ super() }}
    <script type="text/javascript" src="my-script.js"></script>
    {% endblock %}
    

    Flask-Moment 本地化日期和时间

    简介

    如果 Web 程序的用户来自世界各地,那么处理日期和时间可不是一个简单的任务。

    服务器需要统一时间单位,这和用户所在的地理位置无关,所以一般使用协调世界时(Coordinated Universal Time,UTC)。不过用户看到UTC格式的时间会感到困惑,他们更希望看到当地时间,而且采用当地惯用的格式。

    要想在服务器上只使用 UTC 时间,一个优雅的解决方案是,把时间单位发送给Web 浏览器,转换成当地时间,然后渲染。Web 浏览器可以更好地完成这一任务,因为它能获取用户电脑中的时区和区域设置。

    有一个使用 JavaScript 开发的优秀客户端开源代码库,名为 moment.js ,它可以在浏览器中渲染日期和时间。Flask-Moment 是一个 Flask 程序扩展,能把 moment.js 集成到 Jinja2 模板中。

    安装

    使用 pip 安装

    $ pip install flask-moment
    

    使用

    示例1 hello.py: 初始化 Flask-Moment

    from flask_moment import Moment
    moment = Moment(app)
    

    除了 moment.jsFlask-Moment 还依赖 jquery.js。要在HTML 文档的某个地方引入这两个库,可以直接引入,这样可以选择使用哪个版本,也可使用扩展提供的辅助函数,从内容分发网络(Content Delivery Network,CDN)中引入通过测试的版本。Bootstrap 已经引入了 jquery.js,因此只需引入 moment.js 即可。示例2 展示了如何在基模板的 scripts 块中引入这个库。

    示例2 templates/base.html:引入 moment.js

    {% block scripts %}
    {{ super() }}
    {{ moment.include_moment() }}
    {% endblock %}
    

    为了处理时间戳,Flask-Moment 向模板开放了 moment 类。示例3 中的代码把变量 current_time 传入模板进行渲染。

    示例3 hello.py:加入一个 datetime 变量

    from datetime import datetime
    @app.route('/')
    def index():
        return render_template('index.html',
                                current_time=datetime.utcnow())
    

    示例4 展示了如何在模板中渲染 current_time

    示例4 templates/index.html:使用 Flask-Moment 渲染时间戳

    <p>The local date and time is {{ moment(current_time).format('LLL') }}.</p>
    <p>That was {{ moment(current_time).fromNow(refresh=True) }}</p>
    

    format('LLL') 根据客户端电脑中的时区和区域设置渲染日期和时间。参数决定了渲染的方式,'L''LLLL' 分别对应不同的复杂度。format() 函数还可接受自定义的格式说明符。

    第二行中的 fromNow() 渲染相对时间戳,而且会随着时间的推移自动刷新显示的时间。这个时间戳最开始显示为 “a few seconds ago” ,但指定 refresh 参数后,其内容会随着时间的推移而更新。如果一直待在这个页面,几分钟后,会看到显示的文本变成 “a minute ago” “2 minutes ago”等。

    Flask-Moment 实现了 moment.js 中的 format()fromNow()fromTime()calendar()valueOf()unix() 方法。更多的 moment.js 格式化选项可以查看 http://momentjs.com/docs/#/displaying/

    Flask-Moment 渲染的时间戳可实现多种语言的本地化。语言可在模板中选择,把语言代码传给 lang() 函数即可:

    {{ moment.lang('es') }}
    
  • 相关阅读:
    29 顺时针打印矩阵(四-画图让抽象问题形象化)
    27 二叉树镜像(四-画图让抽象问题形象化)
    java的4种代码块
    Eclipse中连接Sql Sever2008 -----转自Yogurshine
    java之HashMap的遍历Iterator
    java之插入排序
    java之选择排序
    java之冒泡排序
    java之快速排序
    java之折半查找
  • 原文地址:https://www.cnblogs.com/ash975/p/15209434.html
Copyright © 2020-2023  润新知