django实战项目 内容管理系统cms (二)数据模型models

雨水:雨水之日獭祭鱼,又五日鸿雁来(候雁北),又五日草木萌动。

2802

1. 项目分析:

在构建数据模型前需要先分析项目需求。
cms(Content Management System内容管理系统) 这个项目主要功能:
1>,文章的呈现:包括标题,内容,作者,评论,赞同数,收藏数。
2>,注册用户信息:昵称,邮箱,密码,简介,收藏了的文章,赞同了的文章,评论了的文章。

我们允许用户对一篇文章多次评论;但点赞和收藏的操作一篇文章只能进行一次,为了实现这一点,需要知道每篇文章和每个用户的对应关系(是否已点赞,是否已收藏)。
我们创建用户和文章,评论三个数据模型,让用户和文章关联成多对多的关系,从而判断用户是否已经收藏了某篇文章,另外创建一个点赞的数据模型,来判断用户是否已经赞同过某篇文章。

2. models.py

当我们创建了focus这个应用(app)的时候,cms/focus这个文件夹中会自动生成models.py这个文件。

2.1 普通用户的数据模型:

在django中内置有django.contrib.auth.models.User模块,这个模块字段有限,但是我们可以继承django.contrib.auth.models.AbstractUser这个类来扩充字段,之所以不自己写User模块,是因为内置的User模块使整个用户验证系统非常容易实现。User模块内置的字段参见 django 文档 ,下面我们只要再扩充一个字段即可:

@python_2_unicode_compatible是django内置的兼容python2和python3的unicode语法的一个装饰器。

只是针对 __str__ 方法而用的,__str__方法是为了后台管理(admin)和django shell的显示,Meta类也是为后台显示服务的,可以查阅  django 文档 了解。

所有的数据模型都继承自models.Model这个模块,models.ForeignKey/CharField/TextField/…这些都是django内置的模型字段,相关知识请查阅: django 文档

继承AbstractUser这个类,我们需要在cms/settings.py中申明默认的user类,我们在settings.py中加入一条申明:

2.2 column字段是文章所属的分类,文章和分类是多对一的关系。我们构建一个Column数据模型:

2.3 创建文章(article)这个数据模型,

author是文章的作者,为了方便,我们把作者和普通用户分别用Author,NewUser这两个数据模型来管理,文章和作者是多对一的关系,文章和普通用户是多对多的关系(点赞,收藏) 。

2.4 然后是评论的数据模型:

2.5 作者的数据模型:

2.6 增加点赞的数据模型:

 

3. 同步数据模型到数据库:

查看settings.py中的DATABASES,django默认使用的数据库引擎是sqlite3,如果你需要改用其它引擎可以查阅django doc, 此项目我们使用默认的sqlite3,
在终端进入项目目录,输入如下命令:

这样就会自动生成数据表,我们使用Navicat Premium打开cms/db.sqlite3这个文件,

splite
这些表有些是django自动生成的,有些是我们models.py模块同步生成的。
点开focus_newuser这个表,我们发现它不仅有profile这个字段,还有其它User模块内置的字段,
focus_article_user这个表是因为文章和普通用户我们设置了多对多的关系,所以自动生成了这一张表来关联这两者。

7 条评论

  • daderan 2016年7月20日 回复

    为什么在class Article中 column和author都设置外键的时候author后面有引号呢

  • robot 2016年8月6日 回复

    感谢博主。请问你的代码用的是什么字体?

    • D.Roger 2016年8月6日 回复 作者

      monaco

  • changliu 2016年10月16日 回复

    感谢 之前学的django有点忘了 准备跟着博主的来一遍然后放到heroku上

  • jwj 2017年1月16日 回复

    用python3就好了

发表评论

电子邮件地址不会被公开。 必填项已用*标注