嚣张的面试开场
面试官:小伙子,python与时间有关的基础模块有哪些?我:timedatetimecalendar面试官:简单介绍下calendar日历模块我:我拒绝!面试官:小子你很拽啊,那你想如何?我:我想给大佬你做一个美观的网页版日历啊。面试官:走两步,我瞧瞧…我:好嘞!
PythonCalender模块
python的日历模块Calender提供了多种日历展示模式:
参数说明示例calendar.calendar(year)输出某一年的日历calendar.calendar()monthcalendar(year,month)返回一个月中天数列表(不是当前月份的天数为0)calendar.monthcalendar(,6)setfirstweekday(firstweekday)0是星期一,…,6为星期日calendar.setfirstweekday(firstweekday=6)prmonth(theyear,themonth,w=0,l=0)w每个单元格宽度,l每列换l行calendar.prmonth(,6)calendar.month_abbr[month]打印月份对应的英文简写calendar.month_abbr[6]calendar.isleap(year)判断某一年是否为闰年calendar.isleap()calendar.weekday(year,month,day)判断某一天是周几0(周一一)到6(周日)calendar.weekday(,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的栅格化divclass="col-lg-3",保证在没有足够宽的情况下,自动转为单月的数据展示,避免重叠其次,针对数据的排列,日历模块中calendar.monthcalendar(year,month)会返回一个原组,但如同下面的情况:
1importcalendar2calendar.setfirstweekday(firstweekday=6)3calendar.monthcalendar(,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]]7calendar.monthcalendar(,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]]11len(calendar.monthcalendar(,5))len(calendar.monthcalendar(,6))有的月份刚好卡在1号周六,所以列表长为6….这样会导致绘图的时候日历表格高度差异,所以如果不满6个的月份,我们手动给他创建创建一个数据全为0的空列表:
1defcalc_calender(date):2year=date.year3yearInfo=dict()4formonthinrange(1,13):5days=calendar.monthcalendar(year,month)6iflen(days)!=6:7days.append([0for_inrange(7)])8month_addr=calendar.month_abbr[month]9yearInfo[month_addr]=days10returnyearInfo针对返回的数据,使用Jinjia2模板进行循环获取,要注意一点是,如果是日期是0的,代表站位符,需要进行替换。但如果整行都是零,会导致Bootstrap的表单样式变更,故使用nbsp进行占位操作。最终HTML代码如下:
1!DOCTYPEhtml2htmllang="en"34head5metacharset="utf-8"6meta