1
0
Эх сурвалжийг харах

feat: 更新时间显示样式

SongZihuan 2 жил өмнө
parent
commit
f6e8b69126

+ 2 - 0
app/app.py

@@ -4,6 +4,7 @@ import sys
 from flask import Flask, url_for, request, current_app, render_template, Response
 from flask_mail import Mail
 from flask_login import LoginManager, current_user
+from flask_moment import Moment
 from flask.logging import default_handler
 from typing import Optional, Union
 
@@ -34,6 +35,7 @@ class HBlogFlask(Flask):
         self.login_manager.login_view = "auth.login_page"
 
         self.mail = Mail(self)
+        self.moment = Moment(self)
         self.cache = cache
         self.cache.init_app(self)
 

+ 4 - 3
object/blog.py

@@ -1,5 +1,6 @@
-from typing import List, Optional
+from typing import List
 from collections import namedtuple
+from datetime import datetime
 
 from sql.blog import (get_blog_list,
                       get_blog_count,
@@ -82,11 +83,11 @@ class BlogArticle(_BlogArticle):
 
     @property
     def update_time(self):
-        return self.info.update_time
+        return datetime.utcfromtimestamp(datetime.timestamp(self.info.update_time))
 
     @property
     def create_time(self):
-        return self.info.create_time
+        return datetime.utcfromtimestamp(datetime.timestamp(self.info.create_time))
 
     @property
     def clicks(self):

+ 2 - 1
object/comment.py

@@ -1,4 +1,5 @@
 from collections import namedtuple
+from datetime import datetime
 
 from sql.comment import read_comment_list, create_comment, get_user_comment_count, delete_comment, read_comment
 import object.user
@@ -46,7 +47,7 @@ class Comment(_Comment):
 
     @property
     def update_time(self):
-        return self.info.update_time
+        return datetime.utcfromtimestamp(datetime.timestamp(self.info.update_time))
 
     def is_delete(self):
         return not self.auth.is_authenticated and self.blog.is_delete  and len(self.content) != 0

+ 2 - 1
object/msg.py

@@ -1,5 +1,6 @@
 from typing import Optional
 from collections import namedtuple
+from datetime import datetime
 
 from sql.msg import read_msg_list, get_msg_count, create_msg, read_msg, get_user_msg_count, delete_msg
 import object.user
@@ -47,7 +48,7 @@ class Message(_Message):
 
     @property
     def update_time(self):
-        return self.info.update_time
+        return datetime.utcfromtimestamp(datetime.timestamp(self.info.update_time))
 
     @property
     def secret(self):

+ 8 - 8
sql/cache.py

@@ -31,7 +31,7 @@ def get_msg_from_cache(msg_id: int):
         return None
     return [msg.get("Email", ""),
             msg.get("Content"),
-            datetime.fromisoformat(msg.get("UpdateTime", "2022-1-1 00:00:00")),
+            datetime.fromtimestamp(float(msg.get("UpdateTime", 0.0))),
             bool(msg.get("Secret", False))]
 
 
@@ -42,7 +42,7 @@ def write_msg_to_cache(msg_id: int, email: str, content: str, update_time: str |
     cache.hset(cache_name, mapping={
         "Email": email,
         "Content": content,
-        "UpdateTime": str(update_time),
+        "UpdateTime": datetime.timestamp(update_time),
         "Secret": str(secret)
     })
     cache.expire(cache_name, CACHE_TIME)
@@ -107,8 +107,8 @@ def get_blog_from_cache(blog_id: int):
             blog.get("Title"),
             blog.get("SubTitle"),
             blog.get("Content"),
-            datetime.fromisoformat(blog.get("UpdateTime", "2022-1-1 00:00:00")),
-            datetime.fromisoformat(blog.get("CreateTime", "2022-1-1 00:00:00")),
+            datetime.fromtimestamp(float(blog.get("UpdateTime", 0.0))),
+            datetime.fromtimestamp(float(blog.get("CreateTime", 0.0))),
             bool(blog.get("Top", False))]
 
 
@@ -122,8 +122,8 @@ def write_blog_to_cache(blog_id: int, auth_id: str, title: str, subtitle: str, c
         "Title": title,
         "SubTitle": subtitle,
         "Content": content,
-        "UpdateTime": str(update_time),
-        "CreateTime": str(create_time),
+        "UpdateTime": datetime.timestamp(update_time),
+        "CreateTime": datetime.timestamp(create_time),
         "Top": str(top)
     })
     cache.expire(cache_name, CACHE_TIME)
@@ -268,7 +268,7 @@ def get_comment_from_cache(comment_id: int):
     return [comment.get("BlogID", ""),
             comment.get("Email", ""),
             comment.get("Content", ""),
-            datetime.fromisoformat(comment.get("UpdateTime", "2022-1-1 00:00:00"))]
+            datetime.fromtimestamp(float(comment.get("UpdateTime", 0.0)))]
 
 
 @__try_redis(None)
@@ -279,7 +279,7 @@ def write_comment_to_cache(comment_id: int, blog_id: str, email: str, content: s
         "BlogID": blog_id,
         "Email": email,
         "Content": content,
-        "UpdateTime": str(update_time)
+        "UpdateTime": datetime.timestamp(update_time)
     })
     cache.expire(cache_name, CACHE_TIME)
 

+ 2 - 0
templates/base.html

@@ -31,6 +31,8 @@
 
     {% block javascript %}
         <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-OERcA2EqjJCMA+/3y+gxIOqMEjwtxJY7qPCqsdltbNJuaOe923+mo//f6V8Qbsw3" crossorigin="anonymous"></script>
+        {{ moment.include_moment() }}
+        {{ moment.lang("zh-CN") }}
     {% endblock %}
 
     <title>{% block title %} {% endblock %} - {{ blog_name }} </title>

+ 40 - 43
templates/docx/article.html

@@ -15,7 +15,7 @@
             {# 检查是否具有读取权限 #}
             <div class="row">
                 <article class="col-12">
-                    <h1> {{ article.title }} <small> {{ article.subtitle }} <small> {{ article.update_time}} / {{ article.create_time}} </small> </small> </h1>
+                    <h1> {{ article.title }} <small> {{ article.subtitle }} <small> {{ moment(article.update_time).format('YYYY-MM-DD HH:mm:ss') }} / {{ moment(article.create_time).format('YYYY-MM-DD HH:mm:ss') }} </small> </small> </h1>
                     <span class="me-1 badge bg-secondary"> 点击量: {{ article.clicks }} </span>
 
                     {% for archive in article.archive %}
@@ -131,51 +131,48 @@
                     </section>
                     <hr>
 
-                    {% cache conf["LIST_CACHE_EXPIRE"], ":blog", ":comment", cache_str %}
-                        {% for comment in article.comment %}
-
-                            {% if show_delete %}
-                                <div id="DeleteModal{{comment.id }}" class="modal fade" role="dialog" aria-hidden="true">
-                                    <div class="modal-dialog">
-                                        <div class="modal-content text-start">
-                                            <div class="modal-header">
-                                                <h4 class="modal-title"> 确认删除评论? </h4>
-                                            </div>
-                                            <div class="modal-body">
-                                                <p> 是否确认删除评论? </p>
-                                            </div>
-                                            <div class="modal-footer">
-                                                <a class="btn btn-danger"
-                                                   href="{{ url_for("docx.delete_comment_page", comment=comment.id) }}"> 删除 </a>
-                                                <button type="button" class="btn btn-outline-dark" data-bs-dismiss="modal"> 取消 </button>
-                                            </div>
+                    {% for comment in article.comment %}
+                        {% if show_delete %}
+                            <div id="DeleteModal{{comment.id }}" class="modal fade" role="dialog" aria-hidden="true">
+                                <div class="modal-dialog">
+                                    <div class="modal-content text-start">
+                                        <div class="modal-header">
+                                            <h4 class="modal-title"> 确认删除评论? </h4>
+                                        </div>
+                                        <div class="modal-body">
+                                            <p> 是否确认删除评论? </p>
+                                        </div>
+                                        <div class="modal-footer">
+                                            <a class="btn btn-danger"
+                                               href="{{ url_for("docx.delete_comment_page", comment=comment.id) }}"> 删除 </a>
+                                            <button type="button" class="btn btn-outline-dark" data-bs-dismiss="modal"> 取消 </button>
                                         </div>
                                     </div>
                                 </div>
-                            {% endif %}
-
-                            <section class="col-12">
-                                <div class="comment">
-                                    <p class="comment-title h5">
-                                        {% if show_email %}  {# 判断是否可读取用户信息 #}
-                                            {{ comment.auth.email }}
-                                        {% else %}
-                                            {{ comment.auth.s_email }}
-                                        {% endif %}
-
-                                        {% if show_delete %}
-                                            <a class="mb-2"
-                                                data-bs-toggle="modal" data-bs-target="#DeleteModal{{comment.id }}"> &times; </a>
-                                        {% endif %}
-
-                                        <br>
-                                        <small> {{ comment.update_time }} </small>
-                                    </p>
-                                    <p> {{ comment.content.replace('\n', '<br>') | safe  }} </p>
-                                </div>
-                            </section>
-                        {% endfor %}
-                    {% endcache %}
+                            </div>
+                        {% endif %}
+
+                        <section class="col-12">
+                            <div class="comment">
+                                <p class="comment-title h5">
+                                    {% if show_email %}  {# 判断是否可读取用户信息 #}
+                                        {{ comment.auth.email }}
+                                    {% else %}
+                                        {{ comment.auth.s_email }}
+                                    {% endif %}
+
+                                    {% if show_delete %}
+                                        <a class="mb-2"
+                                            data-bs-toggle="modal" data-bs-target="#DeleteModal{{comment.id }}"> &times; </a>
+                                    {% endif %}
+
+                                    <br>
+                                    <small style="font-size: 0.8rem"> {{ moment(comment.update_time).fromNow(refresh=True) }} </small>
+                                </p>
+                                <p> {{ comment.content.replace('\n', '<br>') | safe  }} </p>
+                            </div>
+                        </section>
+                    {% endfor %}
                 </article>
             </div>
         {% endif %}

+ 2 - 2
templates/docx/docx.html

@@ -87,7 +87,7 @@
                                 <a class="h4 my-auto" href="{{ url_for("docx.article_page", blog=blog.id) }}">
                                 {{ blog.title }}
                                     <small> {{ blog.subtitle }}
-                                        <small> {{ blog.update_time }} / {{ blog.create_time }} </small> </small> </a>
+                                        <small> {{ moment(blog.update_time).format('YYYY-MM-DD HH:mm:ss') }} / {{ moment(blog.create_time).format('YYYY-MM-DD HH:mm:ss') }} </small> </small> </a>
                                 {% if show_delete %}
                                     <button type="button" class="btn btn-sm btn-danger my-auto btn-close float-end"
                                         data-bs-toggle="modal" data-bs-target="#DeleteModal{{blog.id}}"> </button>
@@ -98,7 +98,7 @@
                                 <a class="h4 my-auto" href="{{ url_for("docx.article_page", blog=blog.id) }}">
                                 {{ blog.title }}
                                     <small> {{ blog.subtitle }}
-                                        <small> {{ blog.update_time }} / {{ blog.create_time }} </small> </small> </a>
+                                        <small> {{ moment(blog.update_time).format('YYYY-MM-DD HH:mm:ss') }} / {{ moment(blog.create_time).format('YYYY-MM-DD HH:mm:ss') }} </small> </small> </a>
                                 {% if show_delete %}
                                     <button type="button" class="btn btn-sm btn-danger my-auto btn-close float-end"
                                         data-bs-toggle="modal" data-bs-target="#DeleteModal{{blog.id}}"> </button>

+ 58 - 60
templates/index/index.html

@@ -29,68 +29,66 @@
             </article>
         </div>
 
-        {% cache conf["VIEW_CACHE_EXPIRE"], ":index" %}
-            <div class="row">
-                {% if current_user.check_role("ReadBlog") %}  {# 检查是否具有读取权限 #}
-                    {% if current_user.check_role("ReadMsg") %}
-                        <article class="col-12 col-lg-8">
-                        {% for blog in blog_list %}
-                            <div class="docx ms-lg-2"> <a class="h4"
-                                                          href="{{ url_for("docx.article_page", blog=blog.id) }}">
-                                {{ blog.title }}
-                                    <small> {{ blog.subtitle }}
-                                        <small> {{ blog.update_time }} / {{ blog.create_time }} </small> </small> </a></div>
-                        {% endfor %}
-                        </article>
-                    {% else %}
-                        <article class="col-12">
-                        {% for blog in blog_list %}
-                            <div class="docx"> <a class="h4"
-                                                  href="{{ url_for("docx.article_page", blog=blog.id) }}">
-                                {{ blog.title }}
-                                    <small> {{ blog.subtitle }}
-                                        <small> {{ blog.update_time }} / {{ blog.create_time }} </small> </small> </a></div>
-                        {% endfor %}
-                        </article>
-                    {% endif %}
+        `<div class="row">
+            {% if current_user.check_role("ReadBlog") %}  {# 检查是否具有读取权限 #}
+                {% if current_user.check_role("ReadMsg") %}
+                    <article class="col-12 col-lg-8">
+                    {% for blog in blog_list %}
+                        <div class="docx ms-lg-2"> <a class="h4"
+                                                      href="{{ url_for("docx.article_page", blog=blog.id) }}">
+                            {{ blog.title }}
+                                <small> {{ blog.subtitle }}
+                                    <small> {{ moment(blog.update_time).format('YYYY-MM-DD HH:mm:ss') }} / {{ moment(blog.create_time).format('YYYY-MM-DD HH:mm:ss') }} </small> </small> </a></div>
+                    {% endfor %}
+                    </article>
+                {% else %}
+                    <article class="col-12">
+                    {% for blog in blog_list %}
+                        <div class="docx"> <a class="h4"
+                                              href="{{ url_for("docx.article_page", blog=blog.id) }}">
+                            {{ blog.title }}
+                                <small> {{ blog.subtitle }}
+                                    <small> {{ moment(blog.update_time).format('YYYY-MM-DD HH:mm:ss') }} / {{ moment(blog.create_time).format('YYYY-MM-DD HH:mm:ss') }} </small> </small> </a></div>
+                    {% endfor %}
+                    </article>
                 {% endif %}
+            {% endif %}
 
-                {% if current_user.check_role("ReadMsg") %}  {# 检查是否具有读取权限 #}
-                    {% if current_user.check_role("ReadBlog") %}
-                        <aside class="col-12 col-lg-4">
-                        {% for msg in msg_list %}
-                            <div class="msg me-0 me-lg-2">
-                                <p class="msg-title h5">
-                                    {% if show_email %}  {# 判断是否可读取用户信息 #}
-                                        {{ msg.auth.email }}
-                                    {% else %}
-                                        {{ msg.auth.star_email }}
-                                    {% endif %}
-                                    <br> <small>
-                                    {{ msg.update_time }} </small> </p>
-                                <p> {{ msg.content.replace('\n', '<br>') | safe }} </p>
-                            </div>
-                        {% endfor %}
-                        </aside>
-                    {% else %}
-                        <aside class="col-12">
-                        {% for msg in msg_list %}
-                            <div class="msg">
-                                <p class="msg-title h5">
-                                    {% if show_email %}  {# 判断是否可读取用户信息 #}
-                                        {{ msg.auth.email }}
-                                    {% else %}
-                                        {{ msg.auth.star_email }}
-                                    {% endif %}
-                                    <br> <small>
-                                    {{ msg.update_time }} </small> </p>
-                                <p> {{ msg.content.replace('\n', '<br>') | safe }} </p>
-                            </div>
-                        {% endfor %}
-                        </aside>
-                    {% endif %}
+            {% if current_user.check_role("ReadMsg") %}  {# 检查是否具有读取权限 #}
+                {% if current_user.check_role("ReadBlog") %}
+                    <aside class="col-12 col-lg-4">
+                    {% for msg in msg_list %}
+                        <div class="msg me-0 me-lg-2">
+                            <p class="msg-title h5">
+                                {% if show_email %}  {# 判断是否可读取用户信息 #}
+                                    {{ msg.auth.email }}
+                                {% else %}
+                                    {{ msg.auth.star_email }}
+                                {% endif %}
+                                <br> <small style="font-size: 0.8rem"> {{ moment(msg.update_time).fromNow(refresh=True) }} </small>
+                            </p>
+                            <p> {{ msg.content.replace('\n', '<br>') | safe }} </p>
+                        </div>
+                    {% endfor %}
+                    </aside>
+                {% else %}
+                    <aside class="col-12">
+                    {% for msg in msg_list %}
+                        <div class="msg">
+                            <p class="msg-title h5">
+                                {% if show_email %}  {# 判断是否可读取用户信息 #}
+                                    {{ msg.auth.email }}
+                                {% else %}
+                                    {{ msg.auth.star_email }}
+                                {% endif %}
+                                <br> <small style="font-size: 0.8rem"> {{ moment(msg.update_time).fromNow(refresh=True) }} </small>
+                            </p>
+                            <p> {{ msg.content.replace('\n', '<br>') | safe }} </p>
+                        </div>
+                    {% endfor %}
+                    </aside>
                 {% endif %}
-            </div>
-        {% endcache %}
+            {% endif %}
+        </div>
     </section>
 {% endblock %}

+ 44 - 46
templates/msg/msg.html

@@ -48,60 +48,58 @@
         </div>
         <hr>
         {% if current_user.check_role("ReadMsg") %}  {# 检查是否具有读取权限 #}
-            {% cache conf["LIST_CACHE_EXPIRE"], ":msg", ":page", cache_str %}
-                <div class="row">
-                    <section class="col-12">
-                        {% for msg in msg_list %}
-                            <div class="msg me-0">
-                                {% if show_delete %}
-                                    <div id="DeleteModal{{msg.id }}" class="modal fade" role="dialog" aria-hidden="true">
-                                        <div class="modal-dialog">
-                                            <div class="modal-content text-start">
-                                                <div class="modal-header">
-                                                    <h4 class="modal-title"> 确认删除留言? </h4>
-                                                </div>
-                                                <div class="modal-body">
-                                                    <p> 是否确认删除留言? </p>
-                                                </div>
-                                                <div class="modal-footer">
-                                                    <a class="btn btn-danger"
-                                                       href="{{ url_for("msg.delete_msg_page", msg=msg.id) }}"> 删除 </a>
-                                                    <button type="button" class="btn btn-outline-dark" data-bs-dismiss="modal"> 取消 </button>
-                                                </div>
+            <div class="row">
+                <section class="col-12">
+                    {% for msg in msg_list %}
+                        <div class="msg me-0">
+                            {% if show_delete %}
+                                <div id="DeleteModal{{msg.id }}" class="modal fade" role="dialog" aria-hidden="true">
+                                    <div class="modal-dialog">
+                                        <div class="modal-content text-start">
+                                            <div class="modal-header">
+                                                <h4 class="modal-title"> 确认删除留言? </h4>
+                                            </div>
+                                            <div class="modal-body">
+                                                <p> 是否确认删除留言? </p>
+                                            </div>
+                                            <div class="modal-footer">
+                                                <a class="btn btn-danger"
+                                                   href="{{ url_for("msg.delete_msg_page", msg=msg.id) }}"> 删除 </a>
+                                                <button type="button" class="btn btn-outline-dark" data-bs-dismiss="modal"> 取消 </button>
                                             </div>
                                         </div>
                                     </div>
+                                </div>
+                            {% endif %}
+
+                            <p class="msg-title h5">
+                                {% if show_email %}  {# 判断是否可读取用户信息 #}
+                                    {{ msg.auth.email }}
+                                {% else %}
+                                    {{ msg.auth.star_email }}
                                 {% endif %}
 
-                                <p class="msg-title h5">
-                                    {% if show_email %}  {# 判断是否可读取用户信息 #}
-                                        {{ msg.auth.email }}
-                                    {% else %}
-                                        {{ msg.auth.star_email }}
-                                    {% endif %}
+                                {% if show_delete %}
+                                    <a class="mb-2"
+                                        data-bs-toggle="modal" data-bs-target="#DeleteModal{{msg.id }}"> &times; </a>
+                                {% endif %}
 
-                                    {% if show_delete %}
-                                        <a class="mb-2"
-                                            data-bs-toggle="modal" data-bs-target="#DeleteModal{{msg.id }}"> &times; </a>
+                                <br>
+                                <small style="font-size: 0.8rem"> {{ moment(msg.update_time).fromNow(refresh=True) }}
+                                    {% if msg.secret == is_secret %}
+                                        <small> [私密留言] </small>
                                     {% endif %}
+                                </small>
+                            </p>
+                            <p> {{ msg.content.replace('\n', '<br>') | safe }} </p>
+                        </div>
+                    {% endfor %}
+                </section>
+            </div>
 
-                                    <br>
-                                    <small> {{ msg.update_time }}
-                                        {% if msg.secret == is_secret %}
-                                            <small> [私密留言] </small>
-                                        {% endif %}
-                                    </small>
-                                </p>
-                                <p> {{ msg.content.replace('\n', '<br>') | safe }} </p>
-                            </div>
-                        {% endfor %}
-                    </section>
-                </div>
-
-                <ul class="pagination col-12 justify-content-center">
-                    {{ macro.get_page_list(page_list, page) }}
-                </ul>
-            {% endcache %}
+            <ul class="pagination col-12 justify-content-center">
+                {{ macro.get_page_list(page_list, page) }}
+            </ul>
         {% endif %}
     </section>
 {% endblock %}