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. DM6446 uboot分析

    1. 顶层目录下的Makefile 按照配置顺序: davinci_config :    unconfig @./mkconfig $(@:_config=) arm arm926ejs davin ...

  2. mongodb去除重复的数据

    里边的内容在某些情况下不可行,可以参考下一篇. 今天出现了一个新的需求,有个部门需要拿到mongodb中的数据,要求去掉其中一个字段内容相同的数据. 虽然mongodb中有distinct来去重,但是 ...

  3. PHP_保留两位小数并且四舍五入_保留两位小数并且不四舍五入

    php保留两位小数并且四舍五入 $num = 123213.666666; echo sprintf("%.2f", $num); php保留两位小数并且不四舍五入 php进一法取 ...

  4. [Err] 1172 - Result consisted of more than one row

    1 错误描述 [Err] 1172 - Result consisted of more than one row Procedure execution failed 1172 - Result c ...

  5. org.apache.catalina.LifecycleException: Failed to start component

    1.错误描述 Using CATALINA_BASE: "D:\NetBeans\apache-tomcat-8.0.12" Using CATALINA_HOME: " ...

  6. 2016弱校联盟十一专场10.3 We don't wanna work!

    能把 not working now 写成 not working hard now 还查一晚上也是没谁了 我的做法是维护两个set 分别是前20% 和后80% #include<iostrea ...

  7. .Net之路,感谢对我深远影响的三位前辈

    为什么要写这篇文章?为什么创立这个站点? 本人大四,学习.Net三年有余,随着近期开始转向对.Net Core的关注,我开始了解到了张善友(www.csharpkit.com).腾飞(www.jess ...

  8. 畅通工程 HDU - 1232

    某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府"畅通工程"的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接 ...

  9. 【SoDiaoEditor电子病历编辑器】编辑器支持移动化

    写在前面 每次写SoDiao时都是一次灵魂拷问,这么猥琐的名字,会对程序媛产生多少误导啊,我是一个正直的人,不管你信不信每个见到我的人都这么说.本次更新拖了很久,本来半个月前应该实现的,却一直拖到昨天 ...

  10. 页面jquery调试的一个宝贵经验(类似于Eclipse中的写出一个对象点它的方法时候用alt加/可以跳出来它所有的方法)

    案例讲解 一,html片段 <div class="page-upload"> <div class="tab-wrapper2"> & ...