数据可视化(三):django创建自定义user model

据上一篇文章有段时间了,又没有灵感了,而且精神堕落了好长一段时间,所以再来这里瞎写写,寻找些什么。

之前一直吵着要玩,有种这辈子都得跟D3杠上的激情。后来发现自己的画图需求用D3学习成本较高,随即换成了,不到一上午的时间,就实现了我画图的需求。选对了工具,办事效率简直神速!

表的设计

目前对这个web上的需求其实没有多少内容,需要一个热力图,我已经做好了,需要一个走势图,我也做好了。现在需要一个网站,把他们穿插起来,所以还得需要django。

要搭一个网站,你得需要一套数据库吧,但是这些表怎么设计呢?我们得先从数据立方体(data cube)聊起。

数据立方体

数据立方体允许以多维对数据建模和观察,它由事实定义。

一般而言,维是一个单位想要记录的透视或实体。例如,AllElectronics可能创建一个数据仓库sales,记录商店的销售,设计维time、item、branch和location。这些维使得商店能够记录商店的月销售,销售商店的分店和地点。每个维都可以有一个与之相关联的表。该表成为维表,它进一步描述维。

通常来讲,多维数据模型围绕诸如销售这样的中心主题组织。主题用事实表表示。事实是数值度量的。把它们看作数量,是因为我们想根据它们分析维之间的联系。例如,数据仓库sales的事实包括dollars_sold(销售额)、units_sold(销售量)和amount_budgeted(预算额)。事实表包括事实的名称或度量,以及每个相关维表的码。

星形、雪花形和事实星座:多维数据模型的模式

最流行的数据仓库的数据模型是多维数据模型。这种模型可以是星形模式雪花模式事实星座模式

星形模式(star schema)

最常见的模型范型是星形模式,其中数据仓库包括(1)一个大的中心表(事实表),它包含大批数据并且不含冗余;(2)一组小的附属表(维表),每维一个。这种模式图很像星光四射,维表显示在围绕中心表的射线上。

雪花模式(snowflake schema)

雪花模式是星形模式的变种,其中某些维表被,因而把数据进一步分解到附加的表中。结果模式图形成类似于雪花的形状,达到将维表更加细分的目的。

雪花模式和星形模式的主要不同在于,雪花模式的维表可能是规范化形式,以便减少冗余。这种表易于维护,并节省存储空间。然而,与典型的巨大事实表相比,这种空间的节省可以忽略。此外,由于执行查询需要更多的连接操作,雪花结构可能降低浏览的效率。因此,系统的性能可能相对受到影响。因此,尽管雪花模式减少了冗余,但是在数据仓库设计中,雪花模式不如星形模式流行。

事实星座(fact constellation)

复杂的应用可能需要多个事实表共享维表。这种模式可以看做星形模式的汇集,因此称作星系模式(galaxy schema)或事实星座。

根据对上面概念的理解,我设计了一款雪花型模型的数据模型:

图中我只写了这个app的model,当然未来还会有模块,应该会添加另一张事实表进行展开。并且本人对数据库设计工具不太熟悉,所以用了mindmanager来做了设计工作。

django:扩展 user model

在django中,支持自带的用户验证模块,然而在官方文档中极力推荐用户在项目中使用自定义user model。原因是假如你想对user model做一些修改,比如添加、这样一些字段的话用在自定义user model中将会很方便。

AbstractUser VS AbstractBaseUser

这里有两个常用的自定义用户模型:和。一般来说这两个模型都可以使用,但是需要做更多的工作来构建它,除非你真的清楚你在做什么,否则不要轻易使用它来作为你的自定义user model。

自定义用户模型

在创建完django project之后,我们需要创建一个app叫做:

然后有以下几步需要操作:

修改

创建一个新的 user model

写一个新的类:和

修改admin配置

在中,我们需要将app添加到参数里,这是为了让django知道我们的自定义user model已经将内建的替换掉了。这里将使用作为这个模型的名字。

当然,我们还要在参数中添加:

接下来修改users这个文件夹中的文件:

从上面的代码可以看出,在构建时继成了,里面的方法将进行重写,于是我添加了几个字段,比如微信号、手机号。

剩下的两张表将以这张表中的email作为外键,并且支持关联删除。这里多句嘴,在django的user model中,有个字段为代表用户的激活状态。官网上称,这个字段就是为了避免删除用户信息这种情况而使用的。

接下来创建文件,来更新forms

上面写的和源码差不多,只不过将变了下,其实这在网站正常运转时没有太大的作用,因为上面的修改只会影响到admin管理模块的用户添加操作。用户在注册过程中还是会通过页面来完成操作。

最后我们修改一下文件

字段用于在修改用户信息时使用,之所以重写这个变量是因为我之前添加了这个字段,所以为了使管理员可以对用户进行手动修改,这里进行了添加操作。

重写user model的工作已经完成,接下来就可以通过和命令来创建表

执行完上面的操作之后,你的数据库中就会多出刚刚创建的一些表以及django自带的一些表。

上面的代码并不是网站中所有的表,只是展示了如何重构user model

Templates/Views/URLs

在重构完user model之后,就可按照正常的操作,创建views、URL、templates来在web上做一些展示。在这里我们的目的是创建、、等页面。

当然为了使得你的项目在运行过程中可以找到,你需要在中添加一些参数:

由于我的model中将字段作为了主键,所以我希望在用户注册时可以通过邮箱验证来完成。接下来的内容将在下一篇笔记中介绍:的使用。

欢迎关注我的个人公众号

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

扫码关注云+社区

领取腾讯云代金券