摸鱼还要提醒?用Python整个倒计时界面自觉摸鱼~

本文介绍了如何使用FastAPI和Jinja2模板库创建一个动态的摸鱼日历页面,包括计算节假日和周末的剩余天数。作者还使用了zhdate库处理农历和阳历转换,确保了节日准确无误。最后,通过Nginx部署到线上站点。
摘要由CSDN通过智能技术生成

嗨害大家好鸭!我是小熊猫❤

摸鱼的时候看到一个很有意思的玩意儿~

请添加图片描述

于是我摸鱼写出来一个页面~ 摸鱼办地址

请添加图片描述
请添加图片描述
模板是这样的:

摸鱼办公室 🐟

【摸鱼办公室】今天是 2021-11-30 星期二

你好,摸鱼人,工作再累,一定不要忘记摸鱼哦 ! 有事没事起身去茶水间去廊道去天台走走,别老在工位上坐着。
多喝点水,钱是老板的,但命是自己的 !

🐟 距离 周末 放假还有 2 天
🐟 距离 元旦 放假还有 3 天
🐟 距离 过年 放假还有 34 天
🐟 距离 清明节 放假还有 97 天
🐟 距离 劳动节 放假还有 123 天
🐟 距离 端午节 放假还有 156 天
🐟 距离 中秋节 放假还有 255 天
🐟 距离 国庆节 放假还有 276 天

请添加图片描述


  • 由于前端是单页面服务,直接撸一个原始的 html 网页就行。
  • FastAPI 对于异步请求是一把好手、更轻、性能更佳。
  • 挂上一层 Nginx 让它看起来像那么回事儿。

实现过程

  • 首先要知道、除了静态文字之外的比如当前日期、距离节日放假的天数等都是动态返回的,我需要使用 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()
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值