嚣张的面试开场

面试官:小伙子,python与时间有关的基础模块有哪些?
我:time datetime calendar
面试官:简单介绍下calendar日历模块
我:我拒绝!
面试官:小子你很拽啊,那你想如何?
我:我想给大佬你做一个美观的网页版日历啊。
面试官:走两步,我瞧瞧…
我:好嘞!

Python Calender模块

python的日历模块Calender提供了多种日历展示模式:

参数 说明 示例
calendar.calendar(year) 输出某一年的日历 calendar.calendar(2019)
monthcalendar(year, month) 返回一个月中天数列表(不是当前月份的天数为0) calendar.monthcalendar(2019, 6)
setfirstweekday(firstweekday) 0是星期一,…,6为星期日 calendar.setfirstweekday(firstweekday=6)
prmonth(theyear, themonth, w=0, l=0) w每个单元格宽度,l每列换l行 calendar.prmonth(2019, 6)
calendar.month_abbr[month] 打印月份对应的英文简写 calendar.month_abbr[6]
calendar.isleap(year) 判断某一年是否为闰年 calendar.isleap(2012)
calendar.weekday(year,month,day) 判断某一天是周几0(周一一)到6(周日) calendar.weekday(2019,12,25)

基本的就是上面这些了….

Bootstrap 表格

Flask使用Bootstrap模板,这个前几期已经说了,还不清楚的朋友,可以看看往期内容。
今天主要说下Bootstrap的table

说明
.table 少量的内补(padding)和水平方向的分隔线
.table-striped <tbody> 之内的每一行增加斑马条纹样式
.table-bordered 为表格和其中的每个单元格增加边框
.table-hover 可以让 <tbody> 中的每一行对鼠标悬停状态作出响应
.table-condensed 可以让表格更加紧凑,单元格中的内补(padding)均会减半
.active 鼠标悬停在行或单元格上时所设置的颜色
.success 标识成功或积极的动作
.info 标识普通的提示信息或动作
.warning 标识警告或需要用户注意
.danger 标识危险或潜在的带来负面影响的动作

Flask日历

今天通过Flask,制作一个网页版日历,系统启动后,计算当天日期,并生成日历,高亮表示本月和今日。
首先,需要考虑日历的响应式布局,每行放四个月的数据,所以需要使用Bootstrap的栅格化<div class="col-lg-3">,保证在没有足够宽的情况下,自动转为单月的数据展示,避免重叠
其次,针对数据的排列,日历模块中calendar.monthcalendar(year, month)会返回一个原组,但如同下面的情况:

 1>>> import calendar2>>> calendar.setfirstweekday(firstweekday=6)3>>> calendar.monthcalendar(2019,5)4>>> [[0, 0, 0, 1, 2, 3, 4], [5, 6, 7, 8, 9, 10, 11],5     [12, 13, 14, 15, 16, 17, 18], [19, 20, 21, 22, 23, 24, 25],6     [26, 27, 28, 29, 30, 31, 0]]7>>> calendar.monthcalendar(2019,6)8>>> [[0, 0, 0, 0, 0, 0, 1], [2, 3, 4, 5, 6, 7, 8],9     [9, 10, 11, 12, 13, 14, 15], [16, 17, 18, 19, 20, 21, 22],
10     [23, 24, 25, 26, 27, 28, 29], [30, 0, 0, 0, 0, 0, 0]]
11>>> len(calendar.monthcalendar(2019,5))
12>>> 5
13>>> len(calendar.monthcalendar(2019,6))
14>>> 6

有的月份刚好卡在1号周六,所以列表长为6….这样会导致绘图的时候日历表格高度差异,所以如果不满6个的月份,我们手动给他创建创建一个数据全为0的空列表:

 1def calc_calender(date):2    year = date.year3    yearInfo = dict()4    for month in range(1, 13):5        days = calendar.monthcalendar(year, month)6        if len(days) != 6:7            days.append([0 for _ in range(7)])8        month_addr = calendar.month_abbr[month]9        yearInfo[month_addr] = days
10    return yearInfo

针对返回的数据,使用Jinjia2模板进行循环获取,要注意一点是,如果是日期是0的,代表站位符,需要进行替换。
但如果整行都是零,会导致Bootstrap的表单样式变更,故使用&nbsp进行占位操作。
最终HTML代码如下:

 1<!DOCTYPE html>2<html lang="en">34<head>5    <meta charset="utf-8">6    <meta http-equiv="X-UA-Compatible" content="IE=edge">7    <meta name="viewport" content="width=device-width, initial-scale=1">8    <title>Flask Calendar</title>9    <link rel="icon" href="{{ url_for('static',filename='favicon.ico') }}">
10    <link href="{{ url_for('static',filename='bootstrap.min.css') }}" rel="stylesheet">
11</head>
12
13<body>
14<div class="container">
15    <h3 class="text-center">Welcome to Flask Calendar {{date.year}} <small><a href="https://www.jianshu.com/u/d23fd5012bed"> 清风Python</a></small></h3>
16
17    {% set week_addr = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'] %}
18    {% for month_addr,monthInfo in content.items()%}
19
20    <div class="col-lg-3">
21        <h4 class="text-center">{{month_addr}}</h4>
22        {% with _month=false %}
23        {% if month_addr == this_month %}
24            <table style='background-color:#a6e1ec' class="table table-bordered">
25            {% set _month = true %}
26        {% else %}
27            <table class="table table-bordered">
28        {% endif %}
29                <tr>
30                    {% for addr in week_addr %}
31                        <th>{{addr}}</th>
32                    {% endfor %}
33                </tr>
34                {% for weeks in monthInfo %}
35                <tr>
36                    {% for day in weeks %}
37                    {% if day == 0 %}
38                    <td>&nbsp</td>
39                    {% elif _month== true and day == date.day %}
40                    <td style="background-color:hotpink;">{{ day }}</td>
41                    {% else %}
42                    <td>{{ day }}</td>
43                    {% endif %}
44                    {% endfor %}
45                </tr>
46                {% endfor %}
47                {% endwith %}
48            </table>
49    </div>
50    {% endfor %}
51
52</div>
53
54</body>
55<footer class="text-center "><strong><a href="https://www.jianshu.com/u/d23fd5012bed">Flask Calendar By:清风Python</a></strong></footer>
56</html>

JInjia2模板中,通过对with 和set的局部变量定义,判断月份与日期,最终达到高亮当月和当天的效果:

当天高亮效果

再来看看完整的效果展示:

完整效果

完整代码:

代码目录
 1# -*- coding: utf-8 -*-2# @Author   : 王翔3# @JianShu  : 清风Python4# @Date     : 2019/6/4 06:015# @Software : PyCharm6# @version  :Python 3.6.87# @File     : index.py89from flask import Flask, render_template, request, session, redirect, url_for
10import calendar
11from datetime import datetime
12
13calendar.setfirstweekday(firstweekday=6)
14app = Flask(__name__)
15
16week = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa']
17
18
19def calc_calender(date):
20    year = date.year
21    yearInfo = dict()
22    for month in range(1, 13):
23        days = calendar.monthcalendar(year, month)
24        if len(days) != 6:
25            days.append([0 for _ in range(7)])
26        month_addr = calendar.month_abbr[month]
27        yearInfo[month_addr] = days
28    return yearInfo
29
30
31@app.route('/', methods=["GET", "POST"])
32def index():
33    if request.method == "GET":
34        date = datetime.today()
35        this_month = calendar.month_abbr[date.month]
36        return render_template('index.html', this_month=this_month, date=date, content=calc_calender(date))
37
38
39if __name__ == '__main__':
40    app.run(debug=True)

公众号回复 日历 ,即可获取完整代码打包文件。

end

热门原创往期:

80行代码!用Python做一个哆来A梦分身

用Python一键生成炫酷九宫格图片,火了朋友圈

熬了一夜!我用Python做了一个网站,帮小姐姐生成漫画头像

用Python实现Instagram滤镜,变成百变女神!

有点玄乎!用Python分析《隐秘的角落》里微表情

每个程序员都是从菜鸟开始成长起来的,没有人一开始就是程序员高手。菜鸟爱编程,专注于分享趣味的编程技巧,不限于Java, Python ,Go, Javascript等语言,让菜鸟爱上编程,进阶成为高手。

菜鸟编程大本营

长按2秒,输入:【书单】

面试官问我Python日历模块,我直接用Flask开发Web版日历应用给他相关推荐

  1. 用Flask开发Web版日历应用

    Python Calender模块 python的日历模块Calender提供了多种日历展示模式: 参数 说明 示例 calendar.calendar(year) 输出某一年的日历 calendar ...

  2. 美女面试官问我Python如何优雅的创建临时文件,我的回答....

    [摘要] 本故事纯属虚构,如有巧合,他们故事里的美女面试官也肯定没有我的美,请自行脑补... 小P像多数Python自学者一样,苦心钻研小半年,一朝出师投简历. 这不,一家招聘初级Python开发工程 ...

  3. 面试官问了四个问题,总结了4个经验

    目录 前言 面试过程 面试总结 面试重点总结和套路 结语 前言 个人是去年年底零基础转行,两三千培训费学出来,学完后也是稀里糊涂,仅是知道功能测试就是找问题,其他接口,性能,数据库,python基础, ...

  4. java执行sql文件_面试官问你MyBatis SQL是如何执行的?把这篇文章甩给他

    初识 MyBatis MyBatis 是第一个支持自定义 SQL.存储过程和高级映射的类持久框架.MyBatis 消除了大部分 JDBC 的样板代码.手动设置参数以及检索结果.MyBatis 能够支持 ...

  5. 字节跳动面试官问我看过哪些源码,然后就没有然后了

    最近,我的一位朋友在找工作,已经拿到了美团.快手等公司的Offer,准备选择其中一家入职了. 后来他又接到了字节跳动的电话,通知他去参加三面.从二面到三面之间隔了挺久的,他以为都没戏了,结果就收到了通 ...

  6. .jar中没有主清单属性_面试官问:为什么SpringBoot的 jar 可以直接运行?

    点击上方蓝色字体,选择"设为星标" 优质文章,及时送达 来源 | https://urlify.cn/uQvIna SpringBoot提供了一个插件spring-boot-mav ...

  7. 面试官问面向对象特点_最好的面试官有什么共同点?

    面试官问面向对象特点 by Aline Lerner 通过艾琳·勒纳(Aline Lerner) 最好的面试官有什么共同点? 我们查看了成千上万的真实访谈以找出答案. (What do the bes ...

  8. 当面试官问Webpack的时候他想知道什么

    希沃ENOW大前端 公司官网:CVTE(广州视源股份) 前言 在前端工程化日趋复杂的今天,模块打包工具在我们的开发中起到了越来越重要的作用,其中webpack就是最热门的打包工具之一. 说到webpa ...

  9. 已经成功拿到了几个offer的我来告诉你,Android面试官问的一些问题,看完这一篇就没有拿不到的offer

    前言 我是2020年毕业于中南大学的计算机学院的,大家可以叫我小吴,我嘞毕业之后在华为实习了差不多一年多,一直都从事着Android开发. 然后2021年的时候因为我自己的一些原因打算离职到外面看看, ...

  10. 再也不怕面试官问我平时都从什么途径学习了

    上次面试,面试官问我平时都从哪些途径学习,我反手就给他看了经常学习的数百个公众号,下面这些更是优中选优的技术号 马哥Linux运维 开发者技术前线:马哥教育是国内顶级的 Linux 云计算.Pytho ...

最新文章

  1. c语言的特点能够编制出复杂的功能程序,以下不是C语言的特点的是()
  2. python自动化是什么-自动化专业学习python需要到什么程度?
  3. SAP SF打印次数统计
  4. lodash源码分析之Hash缓存
  5. java源程序可以有几个主类_Java源程序是由类定义组成的,每个程序可以定义若干个类,但只有一个类是主类。_学小易找答案...
  6. MongoDB优化之二:常见优化方法
  7. P5431-[模板]乘法逆元2【递推】
  8. 一位算法工程师从30+场秋招面试中总结出的超强面经—文本检测与GAN篇(含答案)...
  9. .Net软件设计新思维
  10. 宋宝华: CPU是如何访问到内存的?--MMU最基本原理
  11. 上网时间监控软件_网管软件有哪一些?哪家好?
  12. 【linux】具体芯片MACHINE_START处理
  13. Vue开发实例(02)之将Vue项目代码导入到IDEA并运行
  14. c语言,10行代码写一个简单鼠标连点器
  15. maxwell理论知识
  16. 吉他效果器插件-IK Multimedia AmpliTube 5 MAX 5.0.3 macOS
  17. LimeSDR Mini轻松上手系列1: 介绍
  18. Windows XP几个版本的区分
  19. 运营支持是干什么_运营|你们运营到底是干什么的?
  20. editplus自动换行html,EditPlus如何自动换行

热门文章

  1. ping网络诊断常见故障
  2. 电力线通信技术的发展
  3. CMakeLists.txt 语法介绍与实例演练
  4. Python爬虫爬取一页韩寒新浪博客
  5. 网络货运平台申请后的优劣势分析
  6. 浅谈切比雪夫多项式推导及其实现模版归类
  7. 【复习笔记】电分-第三章-电力系统潮流分析与计算
  8. 时空轨迹数据挖掘综述
  9. 计算机专用英语词汇1695个词汇表
  10. python处理地震sac数据_自己开发的一个SEED格式地震数据转换为SAC格式数据,并完成世界时整天波形合并的Python脚本...