千家信息网

如何基于Python绘制一个摸鱼倒计时界面

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章将为大家详细讲解有关如何基于Python绘制一个摸鱼倒计时界面,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。实现过程首先要知道、除了静态文字之外的比如当前日
千家信息网最后更新 2026年11月02日如何基于Python绘制一个摸鱼倒计时界面

这篇文章将为大家详细讲解有关如何基于Python绘制一个摸鱼倒计时界面,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

实现过程

首先要知道、除了静态文字之外的比如当前日期、距离节日放假的天数等都是动态返回的,我需要使用 Jinja2 模板进行动态绑定。

我应该把重点放在时间的处理上。

而且在这个模板中,有阳历的节日,也是阴历的节日,我需要转换。

初始化一个 FastAPI 对象并声明静态页面的模板目录 (Jinja2Templates)

# -*- coding: utf-8 -*- import datetime from fastapi import FastAPI, Request from fastapi.responses import HTMLResponse from fastapi.templating import Jinja2Templates from zhdate import ZhDate as lunar_date  app = FastAPI(     debug=False,     title="My API",     docs_url="/docs",     openapi_url=f"/openapi.json" )  templates = Jinja2Templates(directory="templates")

可以看到的是我用到了 zhdate 这个库、主要用于阴历和阳历之间的相互转换。用法如下

today = datetime.date.today() print(today.year, today.month, today.day) print("大年时间: ", lunar_date(today.year+1, 1, 1).to_datetime().date()) print("端午时间: ", lunar_date(today.year, 5, 5).to_datetime().date()) print("中秋时间: ", lunar_date(today.year, 8, 15).to_datetime().date()) print("元旦时间: ", f"{today.year+1}-01-01") print("清明时间: ", f"{today.year}-04-05") print("劳动时间: ", f"{today.year}-05-01") print("国庆时间: ", f"{today.year}-10-01")

我们可以梳理一下:

计算距离 大年、元旦 的天数时,要在年份上 +1

计算距离 其他节日 的天数时,要判断天数差是否小于 0,如果是,则年份需要 +1,因为已经过去的节日对此没有意义

distance_big_year = (lunar_date(today.year + 1, 1, 1).to_datetime().date() - today).days  distance_5_5 = (lunar_date(today.year, 5, 5).to_datetime().date() - today).days distance_5_5 = distance_5_5 if distance_5_5 > 0 else (         lunar_date(today.year + 1, 5, 5).to_datetime().date() - today).days  distance_8_15 = (lunar_date(today.year, 8, 15).to_datetime().date() - today).days distance_8_15 = distance_8_15 if distance_8_15 > 0 else (         lunar_date(today.year + 1, 8, 15).to_datetime().date() - today).days  distance_year = (datetime.datetime.strptime(f"{today.year + 1}-01-01", "%Y-%m-%d").date() - today).days  distance_4_5 = (datetime.datetime.strptime(f"{today.year}-04-05", "%Y-%m-%d").date() - today).days distance_4_5 = distance_4_5 if distance_4_5 > 0 else (         datetime.datetime.strptime(f"{today.year + 1}-04-05", "%Y-%m-%d").date() - today).days  distance_5_1 = (datetime.datetime.strptime(f"{today.year}-05-01", "%Y-%m-%d").date() - today).days distance_5_1 = distance_5_1 if distance_5_1 > 0 else (         datetime.datetime.strptime(f"{today.year + 1}-05-01", "%Y-%m-%d").date() - today).days  distance_10_1 = (datetime.datetime.strptime(f"{today.year}-10-01", "%Y-%m-%d").date() - today).days distance_10_1 = distance_10_1 if distance_10_1 > 0 else (         datetime.datetime.strptime(f"{today.year + 1}-10-01", "%Y-%m-%d").date() - today).days

怎么样? 我的命名足够疯狂吧。

接下来需要计算一下距离周末的天数。

def get_week_day(date):     week_day_dict = {         0: '星期一',         1: '星期二',         2: '星期三',         3: '星期四',         4: '星期五',         5: '星期六',         6: '星期天',     }     day = date.weekday()     return week_day_dict[day]  week_day_ = get_week_day(today) print(f"今天是: {week_day_}") # 先获取今天是星期几

按照每周 5 个工作日计算,今天距离周末的天数就是

5 - today.weekday() # today.weekday() 今天距离周末

现在将所有的数据组装起来

time_ = [     {"v_": distance_year, "title": "元旦"},  # 距离元旦     {"v_": distance_big_year, "title": "过年"},  # 距离过年     {"v_": distance_4_5, "title": "清明节"},  # 距离清明     {"v_": distance_5_1, "title": "劳动节"},  # 距离劳动     {"v_": distance_5_5, "title": "端午节"},  # 距离端午     {"v_": distance_8_15, "title": "中秋节"},  # 距离中秋     {"v_": distance_10_1, "title": "国庆节"},  # 距离国庆 ]

至于为什么是 List 而不是 Dict,那是我需要做一个根据距离天数的排序,让最先放假的节日放于最前面, 这样看起来会舒服得多。

time_ = sorted(time_, key=lambda x: x['v_'], reverse=False)

接下来要写一个 路由,将数据传入到 html 页面中去。

@app.get("/", response_class=HTMLResponse) async def readme(request: Request):     return templates.TemplateResponse("readme.html",                                       {"request": request, "time_": time_, "now_": now_, "week_day_": week_day_})

来看一下完整的代码 (main.py):

# -*- coding: utf-8 -*- import datetime from fastapi import FastAPI, Request from fastapi.responses import HTMLResponse from fastapi.templating import Jinja2Templates from zhdate import ZhDate as lunar_date  app = FastAPI(     debug=False,     title="My API",     docs_url=f"/docs",     openapi_url=f"/openapi.json" )  templates = Jinja2Templates(directory="templates")  today = datetime.date.today()  # print(today.year, today.month, today.day) # print("大年时间: ", lunar_date(today.year+1, 1, 1).to_datetime().date()) # print("端午时间: ", lunar_date(today.year, 5, 5).to_datetime().date()) # print("中秋时间: ", lunar_date(today.year, 8, 15).to_datetime().date()) # print("元旦时间: ", f"{today.year+1}-01-01") # print("清明时间: ", f"{today.year+1}-04-05") # print("劳动时间: ", f"{today.year+1}-05-01") # print("国庆时间: ", f"{today.year+1}-10-01")  distance_big_year = (lunar_date(today.year + 1, 1, 1).to_datetime().date() - today).days  distance_5_5 = (lunar_date(today.year, 5, 5).to_datetime().date() - today).days distance_5_5 = distance_5_5 if distance_5_5 > 0 else (         lunar_date(today.year + 1, 5, 5).to_datetime().date() - today).days  distance_8_15 = (lunar_date(today.year, 8, 15).to_datetime().date() - today).days distance_8_15 = distance_8_15 if distance_8_15 > 0 else (         lunar_date(today.year + 1, 8, 15).to_datetime().date() - today).days  distance_year = (datetime.datetime.strptime(f"{today.year + 1}-01-01", "%Y-%m-%d").date() - today).days  distance_4_5 = (datetime.datetime.strptime(f"{today.year}-04-05", "%Y-%m-%d").date() - today).days distance_4_5 = distance_4_5 if distance_4_5 > 0 else (         datetime.datetime.strptime(f"{today.year + 1}-04-05", "%Y-%m-%d").date() - today).days  distance_5_1 = (datetime.datetime.strptime(f"{today.year}-05-01", "%Y-%m-%d").date() - today).days distance_5_1 = distance_5_1 if distance_5_1 > 0 else (         datetime.datetime.strptime(f"{today.year + 1}-05-01", "%Y-%m-%d").date() - today).days  distance_10_1 = (datetime.datetime.strptime(f"{today.year}-10-01", "%Y-%m-%d").date() - today).days distance_10_1 = distance_10_1 if distance_10_1 > 0 else (         datetime.datetime.strptime(f"{today.year + 1}-10-01", "%Y-%m-%d").date() - today).days   def get_week_day(date):     week_day_dict = {         0: '星期一',         1: '星期二',         2: '星期三',         3: '星期四',         4: '星期五',         5: '星期六',         6: '星期天',     }     day = date.weekday()     return week_day_dict[day]   # print("距离大年: ", distance_big_year) # print("距离端午: ", distance_5_5) # print("距离中秋: ", distance_8_15) # print("距离元旦: ", distance_year) # print("距离清明: ", distance_4_5) # print("距离劳动: ", distance_5_1) # print("距离国庆: ", distance_10_1) # print("距离周末: ", 5 - today.weekday())  now_ = f"{today.year}年{today.month}月{today.day}日" week_day_ = get_week_day(today) time_ = [     {"v_": 5 - 1 - today.weekday(), "title": "周末"},  # 距离周末     {"v_": distance_year, "title": "元旦"},  # 距离元旦     {"v_": distance_big_year, "title": "过年"},  # 距离过年     {"v_": distance_4_5, "title": "清明节"},  # 距离清明     {"v_": distance_5_1, "title": "劳动节"},  # 距离劳动     {"v_": distance_5_5, "title": "端午节"},  # 距离端午     {"v_": distance_8_15, "title": "中秋节"},  # 距离中秋     {"v_": distance_10_1, "title": "国庆节"},  # 距离国庆 ]  time_ = sorted(time_, key=lambda x: x['v_'], reverse=False)   @app.get("/", response_class=HTMLResponse) async def readme(request: Request):     return templates.TemplateResponse("readme.html",                                       {"request": request, "time_": time_, "now_": now_, "week_day_": week_day_})   if __name__ == '__main__':     import uvicorn      uvicorn.run(app='main:app', host="0.0.0.0", port=8080, reload=True)

最后就到了 html 页面部分了,来看一下主要的传值。

【摸鱼办公室】今天是 {{ now_ }} {{ week_day_ }}

{% for v_ in time_ %}

???? 距离 {{ v_.title }} 放假还有 {{ v_.v_ }} 天

{% else %}

沒有任何值

{% endfor %}

这样整个的路由构造和页面编写就算是完成了。

最后通过 Nginx 部署到我的站点上。

关于"如何基于Python绘制一个摸鱼倒计时界面"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

时间 星期 国庆 天数 劳动 节日 大年 页面 模板 篇文章 倒计时 界面 接下来 动态 年份 数据 更多 路由 阳历 阴历 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广州淘业互联网络科技 互联网科技公司起名 互联网科技卖菜 互联网科技金融 广州凡科互联网科技 深圳艾佳互联网科技 互联网科技英文翻译 互联网科技股午盘股票涨跌 湖南洣水互联网科技有限公司扣款 中盈科技互联网信息有限公司 宝灵互联网科技有限公司 科技类公司包括互联网吗 996高科技互联网公司 工业互联网展湾科技股份有限公司 科技互联网海报 三亚科技创新互联网基地 科技互联网专业工作会议发言稿 重庆科技产业互联网有哪些 优雇互联网科技有限公司 利用互联网等科技手段 深圳科技互联网 互联网科技集团 贷财互联网科技 互联网科技的未来发展 互联网金融科技公司干啥的 工业互联网等科技实现智能化赋能 滨湖区互联网智能科技产品有哪些 广州百诚互联网科技有限公司官网 工业互联网科技创业 互联网科技创业计划的风险分析
0