Django项目笔记:sessions处理以及复杂对象序列化

前言:一点题外话

我发现,不更新博客的时候,不是非常忙,就是效率非常低。最近没怎么更新博客,原因是第二种= =。惭愧惭愧。

今天效率出奇的高,一天时间把PassNote后端的接口全部写完了,Django很好用,不过实际项目中还是有些框架不能实现的功能需要解决的,我比较喜欢造轮子,不过为了保证效率,还是尽量用现成的工具,减少不必要的折腾。

关于PassNote

之前应该在博客有说过,这是一个密码管理器,用于加密保存各种网站帐号和密码,还可以生成高强度的密码。

项目主页:https://deali-axy.github.io/PassNote/ 了解一下。

不过这个只是一个桌面版软件,也没有云备份功能,所以一直想找时间开发一个跨平台的版本,一直拖延着,等到今天才开始写。

Django的session处理

session简单说就是把cookie拿到服务器端去保存,然后客户端通过服务器返回的id作为session标识。

session框架让你存储和获取访问者的数据信息,这些信息保存在服务器上(默认是数据库中),以 cookies 的方式发送和获取一个包含 session ID的值,并不是用cookies传递数据本身。

Django中使用session

启用session

编辑。

在中添加:

在中添加:

在view中使用

更多session的用法可以参考官方文档:https://docs.djangoproject.com/en/2.0/topics/http/sessions/

关于复杂对象序列化

对于序列化 Django 数据的解决方案已经有以下几种:

Django内建序列化器, 它可以序列化Django model query set 但无法直接序列化单独的Django model数据。如果你的model里含有混合数据 , 这个序列化器同样无法使用(如果你想直接使用序列化数据). 除此之外, 如果你想直接把序列化数据返回给用户,显然它包含了很多敏感及对用户无用对信息。

QuerySet.values()

和上面一样, QuerySet.values() 同样没法工作如果你的model里有 DateTimeField 或者其他特殊的 Field 以及额外数据。

django-rest-framework serializers

django-rest-framework 是一个可以帮助你快速构建 REST API 的强力框架。 他拥有完善的序列化器,但在使用之前你需要花费一些时间入门, 并学习 cbv 的开发方式, 对于有时间需求的项目显然这不是最好的解决方案。

简单说就是Django里面的几种现成方案不是功能不够强大就是学习成本高,正当我要自己造轮子的时候,我找到一个方便的解决方案,所以为了节省时间,立刻放弃了自己造轮子的计划。

项目地址:https://github.com/bluedazzle/django-simple-serializer 了解一下。

不过在实际使用的时候又有一个问题,就是序列化的时候,如果包含的话就报错:

有点坑啊,好不容易找到个好用的工具不用自己造轮子,突然发现这工具有问题,我还要帮它填坑??

好吧,没办法,只能出手了,由于代码没有注释,我也没那么多时间去研究具体问题出在哪里,所以就哪里出错改哪里。刚才也在github上给作者发了issue了。

修改了 Serializer 文件的data_inspect函数。

代码如下,加了一个rel属性判断。

测试了一下,可以正常使用,那就暂时这样吧,虽然有点“hack编程”的感觉,hhh

End

以上就是项目笔记的全部内容了,新版的PassNote和之前一样,在开发完成之后,会全部开源,这次是准备做移动、桌面、小程序多端跨平台的啦,有兴趣的朋友可以关注一下哈~

国际惯例,附截图一张。

About

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180609G01OAC00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券