前言
一月底诞世,二月孵化,三月正式启动,直到5月11日完成并迎来小型产品发布会,前后历时约三个半月,开发历时约两个半月,在课余时间抽出零零散散的时间来写这个小项目,磕磕绊绊的。不过总算是结束了,不过听产品说可能要出2.0……(瑟瑟发抖) 说起来算是小项目,但实际上对于新手来说,涉及的东西还是需要花许些时间去学习的。 目前该版本涉及的技术:
- Python3.6
- Flask框架
- ORM
- celery
这些是比较大的部分,另外flask下面也还有flask-mail等包有使用到 后期若进行重构和2.0升级,要用到 Redis 和 Mysql
这个项目
先简单介绍一下这个项目吧。 老师在云课堂上的布置作业,学生时常会因为这样那样的原因错过 DDL,于是期望云课堂作业提醒功能的出现。因此,针对这一需求,HomeWorks 适时出世,提供云课堂作业查看、定时提醒,以及小组任务发布、管理这两大主要功能模块。但是后来产品组的负责人将小组任务这一模块移到了2.0迭代版,所以该项目的功能主要就是云课堂作业查看以及定时提醒。
开发过程
一开始听说要做 mini project 的时候,还在初步接触 Flask,感到一丝恐慌,觉得自己目前的能力还不足以完成项目的开发。什么是 API?怎么设计和应用数据库?如何和安卓合作对接?完全是一片茫然。所幸,伴随着开发时间的接近,开发流程的推进,伴随着学长们的指导以及自己的学习探索,这些未知都变为了已知。经过此次开发,已基本明白项目开发的大致流程以及一些基本的技术和方法。
二月放寒假,要说进度的话,只能说得上是学flask了,再加上被学长催着写的数据库ER图和 UML图,就这样了。(果然在家学不进去),自我检讨。
三月正式开发。
API文档
写 API 文档,写了 Markdown 和 YAML 两个版本的文档。学习Markdown版的还好,模仿前人的便可;但是YAML版的确实是花了许些时间,要学最基本的语法,然后模仿官方的例子来写。
模拟登陆&爬虫
第三方查看云课堂作业,没有学校支持的我们,拿不到云课堂数据库,只能爬虫。所以作为后端,这个项目主要就是爬虫。爬虫有两种,一种是网页爬取,另一种是 API 获取,当时是后者效率高啊,用 API 获取相关数据。
在这个过程中,我学会了使用 API 爬虫的正确姿势,学会了通过分析js代码得到准确的数据。
爬取数据的前提是要模拟登陆,云课堂的登录需要验证码,这一点会比较麻烦。但是云课堂的验证码比较简单,很容易识别,即能简单地被OCR文字识别。不过后来发现验证码可以跳过。
API
写 API 基本是按照书上 flask 的结构写的,照猫画虎,其实也还好。刚开始确实会有点懵,但之后就会非常熟练了。不过刚开始自己设想会用到的 API 肯定会和实际有出入的,需求也会改变,细节也会改善,之后便会有删减,正常2333。
邮件提醒
首先进行邮箱的验证,即发送验证码。这里的验证我使用 username+验证码+时间戳生成一个token字符串,发送给前台,验证的时候利用该字符串、邮箱和用户输入的验证码进行验证。这一方法不太好,应该用 Redis 来处理。后期如果重构的话会用 Redis 更改。
定时提醒功能使用celery,用celery异步发送邮件的困难主要在于用于发送的邮件问题,这一点上花了比较长的时间,刚开始用的邮箱因为之前测试时候发送邮件太频繁了,导致经常被服务器标志为垃圾文件……曾用多个邮箱进行测试(gmail,qq,163,189),在发送邮件上还是用qq比较好,gmail在国内受到的阻力有点大。
然后就是调整对应时间节点的定时邮件发送了,这也花了一定的时间进行测试、调整。
呃,现在来看好像也没什么的,但在之前似乎就是花了比较长的时间。
部署
在阿里云学生机上部署,不知道用git克隆就行了,还在网上琢磨了好久的FTP……
用nohup使得程序在后台持续运行,不会因为终端的退出之类的事件导致进程终止。
在部署期间,get到了ps进程、nohup等新的技能,并对服务器的部署有了大致的了解。
总结
- 要和产品沟通好,明确需求,不能动不动就改动API
- 在命名上面花的时间有点长了
- 代码块要加注释,方便他人了解以及后期的修改与维护
- 说实话,写API,以及之后的改bug是件非常快乐的事情(感觉太年轻了)
希望之后做其他项目能吸取教训
最后再放两张项目的截图: