英文博客地址:http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-xiii-dates-and-times

中文翻译地址:http://www.pythondoc.com/flask-mega-tutorial/dateandtime.html备注:开源社区的好像是只翻译到十二部分,剩下的我就找不到了。

一、时间戳问题

到目前为止,我们使用 Python 本身去渲染在我们 UserPost 对象中的 datetime 对象,但并不是完全没有问题的。

aaarticlea/png;base64,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" alt="" />

now() 调用返回本地时区的正确的时间,然而 utcnow() 调用返回 UTC 单位的时间。

UTC是Coordinated Universal Time- 世界协调时间,又称世界统一时间,中国时区是CST,UTC+8

如果我们所有的时间戳都使用 now(),我们将会在数据库中存储服务器运行本地的时间。如果有一天我们想把服务器迁移到不同时区的地方,那么所有数据库中的时间戳必须在服务器重启之前修改成当地的正确时间。

而且不同时区的用户很难清楚知道 blog 的发布时间,因为他们看到的是在服务器所在时区的时间。他们需要提前知道服务器的时区是什么时区才能做出适当的调整。

用 UCT 时区标准化了时间戳解决了迁移服务器的问题。但是日期和时间在世界上的任何地方都会以 UTC 形式呈献给用户。这会显得非常奇怪。

二、用户特定的时间戳

最解决问题的方案就是为每一个用户单独把时间戳从 UTC 转换到当地时区。这也允许我们接着在数据库中使用 UTC 时区。

知道用户时区的方法,可以让用户注册的时候选择时区,不过比较累赘。如果能知道电脑上的时间会方便点,不过出于安全原因这是不被允许的。

其实网页浏览器知道用户的时区,并且可以通过标准的 Javascript APIs 导出。有两种方式通过 Javascript 来利用可用的时区配置:

  • “老派” 的方式就是让网页浏览器在某时候发送时区信息当用户第一次登录到服务器。这可以通过 Ajax 调用,或者 一个 刷新标记。一旦服务器知道了时区会把它保存到用户的会话中,当模板渲染的时候会去调整时间。
  • “新派” 的方式就是不会在服务器上改变任何东西,会继续把 UTC 时间戳发送到客户端浏览器上。从 UTC 到当地时区的转换是通过 Javascript 在客户端实现的。

两种方式都不错,但是第二种更加不错。浏览器是最有能力根据系统时区配置来渲染时间的。更有吸引力的是,第二种方式有现成的。

三、介绍 moment.js

Moment.js 是一个小型的,自由的,开源的 Javascript 库,它能够渲染日期和时间。它提供了富有想象的格式化选项。

下载以及介绍直接点链接看官网就好了,很清晰。

四、整合使用moment.js

首先,把下载下来的 moment.min.js 放入到 /app/static/js 文件夹,这样它就能作为一个静态文件提供给客户端。(我下载下来的文件名字是moment.js)

接着,在我们的基础模板中添加对这个库的引用(文件 app/templates/base.html):

<script src="/static/js/moment.min.js"></script>

接下来我们可以在模板里面添加 <script> 标签,写相关操作。不过把它放到一个文件封装起来,然后在文件中调用会更好。

我们的封装是一个很简单的 Python 类(文件 app/momentjs.py):

from jinja2 import Markup

class momentjs(object):
def __init__(self, timestamp):
self.timestamp = timestamp def render(self, format):
return Markup("<script>\ndocument.write(moment(\"%s\").%s);\n</script>" % (self.timestamp.strftime("%Y-%m-%dT%H:%M:%S Z"), format)) def format(self, fmt):
return self.render("format(\"%s\")" % fmt) def calendar(self):
return self.render("calendar()") def fromNow(self):
return self.render("fromNow()")

注意 render 方法并不直接返回字符串而是把它放入了 Jinja2 提供的 Markup 对象中。原因是 Jinja2 默认情况下会自动转义,例如,我们的 <script> 标签是不可能到达到客户端,因为转义成 &lt;script&gt;。把字符串包裹在 Markup 对象里就是告诉 Jinja2 这个字符串是不需要转义的。

既然我们有了一个封装的类,我们需要跟 Jinja2 绑定,这样模块就可以使用它(文件 app/__init__.py):

from .momentjs import momentjs
app.jinja_env.globals['momentjs'] = momentjs

面的代码就是告诉 Jinja2 导入我们的类作为所有模板的一个全局变量。

现在我们准备修改模版。在我们应用程序中有两个地方显示日期和时间。一个就是用户信息页,那里有最后一次登录时间。对于这个时间戳,我们将会使用 calendar() 格式(文件 app/templates/user.html):

{% if user.last_seen %}
<p><em>Last seen: {{ momentjs(user.last_seen).calendar() }}</em></p>
{% endif %}

第二个地方就是在 post 子模板,它是被首页,用户信息页以及搜索页调用。在这里我们将会使用 fromNow() 格式,因为一篇 blog 的撰写时间和它离现在有多久了是一样重要的。我们需要修改子模板使得所有使用它的页面都有效(文件 app/templates/post.html):

<p><a href="{{ url_for('user', nickname=post.author.nickname)}}">{{ post.author.nickname }}</a> said {{ momentjs(post.timestamp).fromNow() }}:</p>
<p><strong>{{ post.body }}</strong></p>

效果:

aaarticlea/png;base64,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" alt="" />

备注:

其实我觉得如果熟悉前端的,也许直接写js会更简单一点?

Flask学习之十三 日期和时间的更多相关文章

  1. Python中的日期和时间

    感觉C语言作为一门编程的入门语言还是很好的,相比较之下,Python为代表的一些语言,适合很多非计算机专业的编程入门学习. Python 日期和时间 Python 程序能用很多方式处理日期和时间,转换 ...

  2. Flask从入门到精通之Flask-Moment本地化日期和时间

    Moment.js 是一个简单易用的轻量级JavaScript日期处理类库,提供了日期格式化.日期解析等功能.它支持在浏览器和NodeJS两种环境中运行.此类库能够 将给定的任意日期转换成多种不同的格 ...

  3. flask日期和时间

    本文翻译自The Flask Mega-Tutorial Part XII: Dates and Times 这是Flask Mega-Tutorial系列的第十二部分,我将告诉你如何以适配所有用户的 ...

  4. MYSQL学习笔记三:日期和时间函数

    MYSQL学习笔记三:日期和时间函数 1. 获取当前日期的函数和获取当前时间的函数 /*获取当前日期的函数和获取当前时间的函数.将日期以'YYYY-MM-DD'或者'YYYYMMDD'格式返回 */ ...

  5. Flask 教程 第十二章:日期和时间

    本文翻译自The Flask Mega-Tutorial Part XII: Dates and Times 这是Flask Mega-Tutorial系列的第十二部分,我将告诉你如何以适配所有用户的 ...

  6. SQLServer学习笔记<>日期和时间数据的处理(cast转化格式、日期截取、日期的加减)和 case表达式

    日期和时间数据的处理. (1)字符串日期 ‘20080301’,这一串为字符串日期,但必须保证为四位的年份,两位的月份,两位的日期.例如,查询订单表日期大于‘20080301’.可以这样写: 1 se ...

  7. Python学习(12)日期和时间

    目录 Python 日期和时间 时间元组 获取当前时间 获取格式化时间 格式化日历 获取某月日历 Time模块 日历模块 其他相关模块和函数 Python 日期和时间 Python 程序能用很多方式处 ...

  8. Python学习笔记 (2) :字符串输出、操作、格式化和日期、时间格式化

    一.字符串输出及运算 1.常用输出格式及方法 ')#单引号 ")#双引号 """)#三个引号 1234567890 1234567890 1234567890 ...

  9. 《Javascript权威指南》13号学习笔记:使用日期和时间

    一.创Date示例 1.Date类的方法和属性是非常不静,故,申请书Date属性和方法之前.必须创建Date类的实例. var date = new Date();  //以当前日期和时间创建实例. ...

随机推荐

  1. 原生ajax请求json数据

    <?php header("content-type:text/html;charset=utf-8"); echo '{"name":"小明& ...

  2. 一些CSS知识点备忘

    RGBA指的是“红色.绿色.蓝色和Alpha透明度”(Red-Green-Blue-Alpha). HSLA代表“色调.饱和度.亮度和Alpha透明度”(Hue-Saturation-Lightnes ...

  3. 读书笔记--Apache.Tomcat.6高级编程 目录

    1.Apache Tomcat 2.web的应用:Servlet.JSP及其他 3.Tomcat安装 4.Tomcat架构 5.Tomcat基本配置 6.高级Tomcat特性 7.Web应用程序配置 ...

  4. android 数据库存取图片

    Android数据库中存取图片通常使用两种方式,一种是保存图片所在路径,二是将图片以二进制的形式存储(sqlite3支持BLOB数据类型).对于两种方法的使用,好像第二种方法不如第一种方法更受程序员欢 ...

  5. windows 下nginx配置ssl https支持

    本文适合正式上线的配置,购买来的证书 私钥*.key文件需要先去掉密码 openssl rsa -in old.key -out new.key

  6. java-String-StringBuffer

    一 String 1.1 == 和 equal() System.out.println("-------两个内容相同,创建方式不同的字符串,面试题--------"); Stri ...

  7. NOIP模拟赛 17.10.10

    初次见面(firstmeet)[题目背景]雾之湖边,静得可怕.露米娅出神凝望.黑白连衣裙,像极了绽放的墨黑和洁白的莲.身边的雾之湖,倒映着血色天空.酒红的双眸,映照一切.低声浅笑,双臂伸直,她悄无声息 ...

  8. XMLHttpRequest cannot load JSONP

    转自CSDN竹音林 1.前端JS代码 <script type="text/javascript" > $.ajax({ dataType:"JSONP&qu ...

  9. ML面试1000题系列(71-80)

    本文总结ML面试常见的问题集 转载来源:https://blog.csdn.net/v_july_v/article/details/78121924 71.看你是搞视觉的,熟悉哪些CV框架,顺带聊聊 ...

  10. 初探 jQuery

    为什么要学习jQuery? 使用javascript开发过程中,有许多的缺点: 1. 查找元素的方法太少,麻烦. 2. 遍历伪数组很麻烦,通常要嵌套一大堆的for循环. 3. 有兼容性问题. 4. 想 ...