初步模板建立完成之后,就是数据的保存。数据也算是当前互联网中最热门的话题。
数据库的配置是西纳泽项目所使用的数据库的类型,不同的数据库需要设置不同的数据库引擎,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_nameclass 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_nameclass 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,可以看到建立了许多表
点开表之后,我们可以进行导入数据等一些列操作。接下来就是对站点进行装饰。