Flask-Moment

  Flask-Moment又是一个flask的扩展模块,用来处理时间日期等信息。用这个模块主要是考虑到两点,第一是为了让不同时区的用户看到的都是各自时区的实际时间,而不是服务器所在地的时间。第二是对于一些时间间隔的处理,如果要手动处理很麻烦,如果有模块就很好了。

■  简介

  pip install flask-moment  来安装这个扩展模块。值得一提的是,单单在后台装好这个拓展模块是不够的,还需要前端的配合,因此前端也要配置好相关的支持库。按书上说的,使用了由JS开发的moment.js这个库(http://momentjs.com),它可以在浏览器中根据浏览器的本地信息,来帮助渲染从后台传过去的日期和时间数据,让浏览者看到的是很友好的本地时间。在安装Flask-Moment的时候,moment.js已经被安装到了相关目录下,我们在配置Jinja2模板的时候可以手动地添加一下引用。

  比如在template/base.html中:

{% block scripts %}   //改变的是scripts的这个block,来引入moment.js这个js文件
{{ super() }}
{{ moment.include_moment() }}
{% endblock %}

  从上面的模板代码中可以看到,为了处理时间,Flask-Moment给模板文件开放了moment这个类在模板文件中使用,moment类是有“构造方法”的,其接受一个参数current_time,后台在render_template的时候就可以指定current_time来传递给前端时间信息了。一般而言,这个current_time要求是一个utc时间元组,可以调用datetime.datetime.utcnow()来获取。

■  实例

  下面是一个简单的应用例子:
  前端页面模板部分代码:

{% block scripts %}
{{ super() }}
{{ moment.include_moment() }}  //在前端中通过方法引用moment.js文件
{{ moment.locale('zh-cn') }}  //将moment.js本地化,否则渲染出来的时间日期都是英文的
{% endblock %} {% block page_content %}
{{ super() }}
<h3>Time now is {{ moment(current_time).format('LLL') }}</h3><hr>
{% endblock %}

  后端部分代码:

m = Moment(app)    #和bootstrap一样,不要忘了这一步,否则前端报找不到moment类的错

@app.route('/time',methods=['GET'])
def show_time():
return render_template('time.html',current_time=datetime.datetime.utcnow())

  最关键的是前端中的moment(current_time).format这一句。current_time即后端传来的时间元组,不一定要是当前时间。moment类以这个时间元组为依据创建对象,然后调用一些方法来渲染出你想要的时间or日期信息。具体有哪些方法以及方法参数如何选择可以参看site-packages/flask_moment.py这个源码,或者上【http://momentjs.com/docs】这个官方网站看文档。下面介绍几个常用的

  ●  format方法

  format方法的参数是日期时间格式,但是表示特别奇特,不是python中常见的%Y-%m-%d这种形式,而是类似于'YYYY-MM-DD HH:mm:SS',这里较为方便地用了LLL,官方文档中给出的LLL对应的格式实例是September 4 1986 8:30 PM。这是在en作为语言的环境下,如果像上面一样在调用方法之前我已经使用了locale进行本地化工作的话,那么现实出的就是符合中国人习惯的时间日期格式了,比如上面这个实例中显示的时间是‘2017年8月16日下午5点32分’。更多详细设定:【http://momentjs.com/docs/#/displaying/format/】

  ●  fromNow方法

  fromNow方法显示当前时间距离元素初次被渲染的时间多久了。而且它还接受一个refresh=boolean的参数,默认是False,但是如果改成True,其效果就是如果你待在这个页面,那么每隔一分钟(从flask_moment的源码上来看是一分钟)就刷新一次页面,给出更新后的时间间隔信息。而且为了友好性,它会在时间间隔比较小的时候提示“几秒前”,“1分钟前”,“2分钟前”等等。

  与fromNow类似的还有一个fromTime方法,给定时间点,计算当前到那个时间点之间过了多久,需要注意要确保那个时间是在过去而不是在未来,否则就会出现很神奇的计算错误。

  额外提下,这些方法都是包装了moment.js中的from方法,与之相对的还有一个to方法,不过flask-moment没有对to系列的计算进行包装。如果直接想要使用moment.js中的一些方法的话可能就需要在模板的script标签中手动写一些JS/JQ代码了。

  ●  calendar方法

  上面提到了fromNow等方法会为了信息的友好性而给出一些修饰,calendar方法也是一样,而且是在天和星期级别上的修饰。比如调用calendar()的地方会把调用它的moment对象指定的时间点显示为'明天晚上6:20'或者'上周六中午12:00'这样的字样。calendar方法也可以设置refresh=True,但不接受除此以外的其他参数。

  ●  valueOf和unix方法

  这两个方法都是返回调用它的moment对象所指向那个时间点的时间戳,前者单位是毫秒,后者单位是秒。

  moment.js里还有很多很多方法,然而flask_moment只包装了上面几个(这个文件本身一共也就100来行。。),那我也就写到这里为止把。

【Flask】 使用Flask-Moment进行日期时间的管理的更多相关文章

  1. flask框架----flask基础

    知识点回顾 1.flask依赖wsgi,实现wsgi的模块:wsgiref,werkzeug,uwsgi 2.实例化Flask对象,里面是有参数的 app = Flask(__name__,templ ...

  2. 【Python】【Flask】Flask 后台发送html页面多种方法

    1.使用模板: @app.route('/') def home(): return render_template("homepage.html")#homepage.html在 ...

  3. flask中Flask()和Blueprint() flask中的g、add_url_rule、send_from_directory、static_url_path、static_folder的用法

    1.Blueprint()在蓝本注册函数register_blueprint()中,第一个参数为所注册的蓝本名称.当我们在应用对象上注册一个蓝图时,需要指定一个url_prefix关键字 参数(这个参 ...

  4. 【Flask】Flask Cookie操作

    ### 什么是cookie:在网站中,http请求是无状态的.也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户.cookie的出现就是为了解决这个问题,第 ...

  5. flask之Flask、config配置

    flask_config.py ''' flask的配置: 1.flask项目初始化配置: (1)app=Flask(__name__)#初始化声明falsk项目为当前py文件,app应用变量名可以更 ...

  6. EasyUI datagrid 日期时间格式化

    EasyUI datagrid中显示日期时间时,会显示为以下不太直观的数值: 添加以下JavaScript脚本,然后在field中添加 formatter: DateTimeFormatter 即可. ...

  7. Python flask 基于 Flask 提供 RESTful Web 服务

    转载自 http://python.jobbole.com/87118/ 什么是 REST REST 全称是 Representational State Transfer,翻译成中文是『表现层状态转 ...

  8. POCO库——Foundation组件之日期时间DateTime

    日期时间DateTime:内部提供多个设计计时器.日期.时区.时间戳等: Clock.h :Clock时钟计时类,_clock:Int64类型时钟值,CLOCKVAL_MIN.CLOCKVAL_MAX ...

  9. db2 日期时间格式

    db2日期和时间常用汇总 1.db2可以通过SYSIBM.SYSDUMMY1.SYSIBM.DUAL获取寄存器中的值,也可以通过VALUES关键字获取寄存器中的值. SELECT 'HELLO DB2 ...

随机推荐

  1. 如何进行系统配置 ——了解DOS下的内存

    DOS操作系统最早设计时,PC机的硬件系统只支持1M字节的寻址空间,所以DOS只能管理最多1M字节的连续内存空间.在这1M内存中,又只有640K被留给应用程序使用,它们被称为常规内存或基本内存,其它3 ...

  2. 质量管理:PDCA循环

    PDCA循环又叫质量环,是管理学中的一个通用模型,最早由休哈特于1930年构想,后来被美国质量管理专家戴明博士在1950年再度挖掘出来,并加以广泛宣传和运用于持续改善产品质量的过程.[1] 中文名 P ...

  3. 笔记本CPU低压和标压有什么区别?

    笔记本CPU英文称Mobile CPU(移动CPU),它除了追求性能,也追求低热量和低耗电,最早的笔记本电脑直接使用台式机的CPU,但是随CPU主频的提高, 笔记本电脑狭窄的空间不能迅速散发CPU产生 ...

  4. 【php】curl常见的错误号和解释

    curl 错误代码列表 CURLE_UNSUPPORTED_PROTOCOL (1) – 您传送给 libcurl 的网址使用了此 libcurl 不支持的协议. 可能是您没有使用的编译时选项造成了这 ...

  5. [PHP开发] phpmailer问题 错误原因: Could not instantiate mail function

    Send via the PHP mail() function function mail_send($header, $body) { // Create mail recipient list ...

  6. 部署Java Web项目报错(一)

    今天,我在部署Java Web项目时,出现错误,并且在eclipse新建一个servers,却出现多个项目. 具体错误截图如下: 然后,我又将项目部署到JBoss服务器中,却还是运行不成功 22:12 ...

  7. day8(字符串操作)

    一.字符串操作 1.index  #返回字符串的索引值 s = "Hello word" print(s.index('o')) 2.isalnum #检测字符串是否由字母和数字组 ...

  8. Java并发编程-各种锁

    安全性和活跃度通常相互牵制.我们使用锁来保证线程安全,但是滥用锁可能引起锁顺序死锁.类似地,我们使用线程池和信号量来约束资源的使用, 但是缺不能知晓哪些管辖范围内的活动可能形成的资源死锁.Java应用 ...

  9. 【小白学爬虫连载(10)】–如何用Python实现模拟登陆网站

    Python如何实现模拟登陆爬取Python实现模拟登陆的方式简单来说有三种:一.采用post请求提交表单的方式实现.二.利用浏览器登陆网站记录登陆成功后的cookies,采用get的请求方式,传入c ...

  10. 【HDU2255】奔小康赚大钱

    题面 传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子. 这可是一件大事,关系到人民的住房问题啊.村里共有n间房间,刚好有n家老百姓,考虑到每家都要有房住(如果有老百姓 ...