首页 > 技术文章 > Violet音乐社区-个人总结

nicochou 2019-12-10 01:20 原文

Violet音乐社区-个人总结

目录

一、项目相关链接

Violet音乐社区需求分析说明书
Violet音乐社区设计文档
Violet音乐社区API接口文档
Violet音乐社区界面原型手册
Violet音乐社区前端源码
Violet音乐社区后端源码
Violet音乐社区

二、参与工作

后端我们小组使用了flask框架进行开发,我在权限操作中主要是用到了flask-login插件,这款插件主要解决了登录登出后在访问一些API接口之前自动检测是否登录(检验是否拥有权限),在一些登录注册等接收较多参数的API中,使用wtforms进行了参数的一些必要校验

2.1 权限模块

  • 注册功能
    注册我主要是以邮箱为标准进行注册,我们要求的是邮箱不可以重复,而用户名这些则无所谓,而对于用户的密码加密,我使用了werkzeug.security中的generate_password_hash方法对密码进行加盐哈希加密,这样密码在数据库中能保证安全。

  • 登录功能
    用户输入邮箱和密码进行登录,我们先通过用户传入邮箱取出加密的密码,然后使用werkzeug.security中的check_password_hash方法进行判断,判断明文和加密之后的密码是否相同,注意这里是不能通过generate_password_hash再次进行加密然后对原来的加密密码进行比较,因为generate_password_hash方法会随机生成一个盐值,即使密码相同,加密之后的密码也不一定相同。这里再验证过后,我们使用flask-login插件中的login_user方法把用户的user_id插入session中,并在web端的cookie中存入session,下次用户发请求时,浏览器会把session一起带过来进行校验。

  • 忘记密码
    忘记密码打算使用发邮箱的方式进行密码找回,因此用户先要输入邮箱以便我们判断用户是否存在并且把user_id取出来,这步操作以后我是打算传入token来标志用户身份,所以我们先要把user_id序列化(加密编码),我这边是使用了python中itsdangerous库里的TimedJSONWebSignatureSerializer对象,先通过一段唯一的key值生成一个序列化器,再把user_id传入进行序列化并且编码。邮件的发送我用到了flask的另一个插件,flask-mail,通过生成一个message,在本地渲染好html之后把内容添加到message中并且在附带的修改密码url中把token带上来标识身份,这样之后其实邮件已经能够发送成功(前提是已经开通了smtp服务,我的是163邮箱,qq邮箱也是可以的),但是发现一个问题,那就是发送邮箱的操作比较慢,用户会需要等待,这其实是没必要一直卡在界面上,我就把发送邮件的操作改成了异步的,这样就大大节省了时间。

  • 登出功能
    使用flask_login中的logout_user方法可以从session中pop出user_id

2.2 用户模块

* **通过user_id搜索用户** 这里主要考虑到用户可能会查看某个用户的个人信息,所以写了这个接口但是没有考虑到用户可以通过用户昵称模糊查询用户,所以在之后的接口上继续写了个通过用户昵称模糊查找用户的操作。 * **通过nickname模糊查询用户** 这里就是通过用户昵称模糊查询用户,其实这个和上面那个没啥好说的,都是给出一个user_id或者是user_nickname(都是从前端传入)来从数据库中查找用户 * **搜索关注用户** 这个是从关注表中查询当前用户关注了哪些用户,并把关注的用户列表返回给前端。 * **修改用户信息** 修改用户信息是先通过user_id从数据库中取出用户的所有信息,创建一个user对象,把信息赋值给user对象,然后把前端传入的对应的值赋给该user对象,这样在进行update操作时,即使前端用户在某个字段上没有输入任何信息也不会导致相应字段变为空,依然保存原来的信息。 * **生日提醒** 这里写了个生日提箱,主要是给关注当前用户的用户发出提醒和对当前用户送上生日祝福,这个生日日期的计算并不精确(并不是固定生日前多少天发出生日祝福)我这边可能是生日前3天,也可能是生日前4天,因为我只是比较了月份和日期,并没有关注年份,也同样没有关注每个月的天数不一致(我全部当成了30天)所以在这上面可能会出现一些偏差,但是大致准确,且生日提醒无需太过准确,只要生日当天对用户送的生日祝福日期准确就行。 * **修改密码** 这里也需要有一个修改密码,虽然有忘记密码功能,但是那个确实是给真正忘记密码的人准备的,如果用户登录之后没有该功能反而要通过忘记密码去修改密码,那反而太过麻烦,用户体验感必然极差。

2.3 关注用户操作

* **关注用户** 给出一个to_user_id(需要被关注的用户id)把当前用户和该user_id存入表中表示关注。 * **是否关注用户** 也是给出两个id,一个user_id,一个to_user_id,从表中查询,user_id是否关注to_user_id * **取消关注** 取消关注就是删除表中相应字段,不多解释,其实我认为软删除更好(多添加一个字段,来表示是否被删除)因为人很复杂,一会想要关注了,一会又不想关注了。

项目总结

这是我第一次团队协作做这种产品开发,可以说是合作比较顺利的一次,这次的搜获其实非常多,初步掌握了flask(一开始我以为会用spring这种框架,且项目开始的时候并没有接触过flask,那时候真的很紧张,怕拖累队友,不过侥幸的是flask入门并不是特别难,且从网上找找视频资源,可以很快速的入门),入了门之后才会发觉flask是真的非常方便,不需要spring那种一开始的繁琐配置,不需要把项目部署到tomcat上,只需要写代码运行即可(flask自带了服务器),说句实话,能快速入门也是因为网上资源比较多,所以关键还靠自己找资料,这时候意识到能快速准确找到适合自己的资料是多么重要,回到项目,大家都很努力,特别是组长和另外两位同学,熬了两夜,页面就我看来做得非常精致了,接口也写了很多,也有同学想出了各种创新的想法(比如推荐功能啥的)虽然最后没有加上去(砍掉了很多功能,前端工作量确实巨大),但是还是很好的锻炼了思维吧,这次毫无疑问收货肯定是巨大的,但是不足之处也很明显,其实我写接口并没有MVC三端分离,我把所有数据库操作都直接写在接口上,导致当某一个同学想要调用我的一部分功能时无法做到,这就导致代码复用性降低这确实是我一开始没有注意到的,这确实需要加强与改进。总得来说,violet是我比较满意的一个作品。

课程建议

不得不说老师讲课确实别有一番风味,讲的不无聊,这就导致课堂其实还是比较活跃的,大部分同学也不会低头或是睡觉。老师也总是会传授一些个人经验,或是生活中的一些经验这个还是可以,但是他人的案例其实可以稍微削减一下,并不需要这么多,因为偏离太多会导致上课不知道具体讲了什么知识点。

推荐阅读