1 这一章主要任务是进行数据库的设计
2 设计一个博客需要什么数据呢?
其实仔细想想,你会想到博客肯定有用户,就需要用户表, 博客发博文,就需要文章表, 文章有分类,就需要分类表, 文章有标签就需要标签表,写的文章可以让别人去评论,就需要评论表, 博客最后应该有友情链接,就需要友情链接表,当然可能还有一些广告,就需要广告表,对吧。分析清楚了这些表之后,肯定还要分析数据表之间的对应关系,一篇文章只能一个用户发表,一个用户可以发表多篇文章,所以用户表和文章表之间是一对多的关系,一篇文章对应一个分类,一个分类可以对应多篇文章,因此分类表和文章表之间是一对多的关系, 一篇文章有多个标签,一个标签可以对应多个文章,因此文章表与标签表是多对多的关系,
一篇文章可以有多个评论,一个评论只能是对一篇文章,所以文章表与评论表是一对多的关系,一个用户可以有多个评论,而一个评论只能是对应一个用户,因此用户表和评论表之间是一对多的关系,广告表,链接表与其他表没有对应关系
3 数据表详情分析
用户表应该包含主键id,用户名,密码,邮箱,浏览量,是否推荐,所属分类等。。。
文章表应该包括主键id,文章标题,描述,内容,外键(一对多)
分类表:主键id, 分类名称, 以及外键(一对多)
评论表:主键id, 评论内容, 以及外键(一对多)
标签表:主键id, 标签名, 以及外键(多对多)
广告表:主键id, 广告标题, 广告描述, 图片路径, 回调url,发布时间。。。。
链接表:主键id, url地址, 友情链接描述, 发布时间。。。
4 把分析结果的代码写在models.py中,注意每一张表对应一个类,继承models.Model,用户表特殊,它继承AbstractUser这个类,一对多关系外键记得加on_delete这个参数,每一个后面记得加上以下代码:
class Meta:
verbose_name = 'xxxx'
verbose_name_plural = verbose_name
ordering = ['-xxxxxx']
def __str__(self):
return self.xxxx
这样做的目的就是为了在admin后台显示的时候能显示相应的字段信息,以及一些逻辑处理,比如排序
5 设置好这些之后,应该到settings.py那里设置一下数据库,因为默认的数据库是sqlite3数据库,我们需要把它改成mysql数据库,代码如下:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 数据库名称,
'USER': 用户名,
'PASSWORD': 密码,
'HOST': 主机,
'PORT': 端口号,
}
}
6 设置好这些后,并没有结束, 因为我们没有执行mysql的模块# 因为django默认你导入的驱动是MySQLdb,可是MySQLdb对于py3有很大问题,所以我们需要的驱动是 PyMySQL,当成是mysqldb一样使用,当然也可以不写这句,那就按照pymysql的方式, 因此需要在项目名下的_init_.py模块下导入下面代码:
import pymysql
pymysql.install_as_MySQLdb()
7这样是不是就可以了呢,no,因为我的一个类是class User(AbstractUser):,它和源码的类重名了,这样会报错,而且Django内建的User模型可能不适合某些类型的项目。例如,在某些网站上使用邮件地址而不是用户名作为身份的标识可能更合理。Django允许你通过修改setting.py文件中的 AUTH_USER_MODEL 设置覆盖默认的User模型,所以,我应该在settings.py中配置如下信息来告诉django使用我自己定义的这个类,代码如下:
AUTH_USER_MODEL = 'blog.User' # blog是应用名
8设置完后,自己创建一个博客的数据库,推荐使用navicat这个工具创建,比较轻便
创建完需要执行几条命令来生成数据表,代码如下:
python manage.py makemigrations
python manage.py migrate
在哪里使用这几条命令呢, 可以cmd打开命令行,在命令行里面找到项目路径时输入内容,也可以用pycharm的tools下的run manage.py,我介绍一下在pycharm下面如何生成数据库表的操作
makemigrations blog 为什么会加blog呢,目的是只生成blog应用下的数据表
生成的数据表:
9不足之处,欢迎批评指正,thanks