初步模板建立完成之后,就是数据的保存。数据也算是当前互联网中最热门的话题。
数据库的配置是西纳泽项目所使用的数据库的类型,不同的数据库需要设置不同的数据库引擎,Django提供4种数据库引擎。分别是:
'django.db.backends.mysql'
'django.db.backends.postgresql'
'django.db.backends.sqlite3'
'django.db.backends.oracle'
在我看来,我觉得数据的连接和使用对程序员也是一个非常大的提升。
项目创建时默认使用Sqlite3数据库,这是一款轻型的数据库,常用于嵌入式系统开发,而且占用的资源非常多。但是django2中不再支持mysqldb
作为MySQL的连接模块,而选择了mysqlclient
模块
pip install mysqlclient
但是我在安装完成之后,还是有错误显示,这个时候在安装一个
pip install PyMySQL
这两个模块安装后,将MySQL开启,进行连接。
书上用5.7作为一个,我也建议使用5.7,因为在8版本的密码加密方式发生了改变。
所以8版本需要在MySQL的可视化工具中运行以下SQL语句:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'newpassword';
FLUSH PRIVILEGES;
之后我们下载一个navicat进行数据的管理。
建议下载navicat10版本的,网上有许多的注册码,我先贴一个我自用的,如果不行,在继续寻找
NAVN-LNXG-XHHX-5NOO
然后将之前DATABASE
中设置的用户名和密码填入,连接就成功
首页的歌曲信息应该来自于数据库,除了Django内置的数据表之外,根据项目的数据库设计得知,网站一共定义了4张数据表,将4个数据表所对应的模型都在index的models.py中进行定义
#index的models.py
from django.db import models
#歌曲分类表label
class Label(models.Model):
label_id = models.AutoField('序号', primary_key=True)
label_name = models.CharField('分类标签', max_length=10)
def __str__(self):
#设置返回值,若不设置,则默认返回Type对象
return self.label_name
class Meta:
#设置Admin界面的显示内容
verbose_name = '歌曲分类'
verbose_name_plural = '歌曲分类'
上面的就是一个对数据表的定义,表名就是一个类名,并且在label_id定义了主键。跟SQL语句是相似的,只不过用的语言不同而已。接着分别定义了歌曲信息表song,歌曲动态表dynamic,歌曲点评表comment。
#歌曲信息表song
class Song(models.Model):
song_id = models.AutoField('序号', primary_key=True)
song_name = models.CharField('歌名', max_length=50)
song_singer = models.CharField('歌手', max_length=50)
song_time = models.CharField('时长', max_length=10)
song_album = models.CharField('专辑', max_length=50)
song_languages = models.CharField('语种', max_length=20)
song_type = models.CharField('类型', max_length=20)
song_release = models.CharField('发行时间', max_length=20)
song_img = models.CharField('歌曲图片', max_length=20)
song_lyrics = models.CharField('歌词', max_length=50, default='暂无歌词')
song_file = models.CharField('歌曲文件', max_length=50)
label = models.ForeignKey(Label, on_delete=models.CASCADE,verbose_name='歌名分类')
def __str__(self):
return self.song_name
class Meta:
#设置Admin界面的显示内容
verbose_name = '歌曲信息'
verbose_name_plural = '歌曲信息'
#歌曲动态表dynamic
class Dynamic(models.Model):
dynamic_id = models.AutoField('序号', primary_key=True)#生成默认的id字段
song = models.ForeignKey(Song, on_delete=models.CASCADE, verbose_name='歌名')
dynamic_plays = models.IntegerField('播放次数')
dynamic_search = models.IntegerField('搜索次数')
dynamic_down = models.IntegerField('下载次数')
class Meta:
#设置admin界面的显示内容
verbose_name = '歌曲动态'
verbose_name_plural = '歌曲动态'
class Comment(models.Model):
comment_id = models.AutoField('序号', primary_key=True)
comment_text = models.CharField('内容', max_length=500)
comment_user = models.CharField('用户', max_length=20)
song = models.ForeignKey(Song, on_delete=models.CASCADE,verbose_name='歌名')
#on_delete=models.CASCADE,删除关联数据,与之关联也删除
comment_date = models.CharField('日期', max_length=50)
class Meta:
verbose_name = '歌曲评论' #verbose_name 在站点管理设置字段的显示名称
verbose_name_plural = '歌曲评论'
一些django定义的说明
AutoField:只是为模型创建一个自增长的字段,所做的仅仅是创建。自增的工作由所使用的数据库完成。
CharField:只是字符串类型
ForeignKey:类似SQL中的外键,在某类名中使用,作为另一类名的外键
只要了解SQL,并且有了一定的SQL语法,这些理解起来比较容易的
定义完成之后,再次到Pycharm中的Terminal输入数据迁移指令:
F:\music>python manage.py makemigrations
Migrations for 'index':
index\migrations\0001_initial.py
...
F:\music>python manage.py migrate
之后打开navicat,可以看到建立了许多表
点开表之后,我们可以进行导入数据等一些列操作。接下来就是对站点进行装饰。