濟南網(wǎng)站優(yōu)化公司電話評論優(yōu)化
使用Python Django框架制作一個音樂網(wǎng)站,在系列文章2的基礎(chǔ)上繼續(xù)開發(fā),本篇主要是后臺單曲、專輯、首頁輪播圖表模塊開發(fā)。
目錄
后臺單曲、專輯表模塊開發(fā)
表結(jié)構(gòu)設(shè)計
單曲表(singe)結(jié)構(gòu)
專輯表(album)結(jié)構(gòu)
創(chuàng)建表模型
創(chuàng)建表
后臺注冊表模型
后臺首頁輪播圖表模塊開發(fā)
表結(jié)構(gòu)設(shè)計
創(chuàng)建表模型
創(chuàng)建表
后臺注冊表模型
引入表模型
后臺自定義
總結(jié)
后臺單曲、專輯表模塊開發(fā)
表結(jié)構(gòu)設(shè)計
單曲表(singe)結(jié)構(gòu)
字段 | 類型 | 注釋 |
id | int(11) | 單曲id |
sid | int(11) | 所屬歌手id |
aid | int(11) | 所屬專輯id |
name | varchar(50) | 單曲名稱 |
duration | int(11) | 時長(ms) |
path | varchar(200) | 歌曲文件鏈接 |
lyric | varchar(200) | 歌詞文件鏈接 |
addtime | int(11) | 發(fā)行時間 |
updatetime | int(11) | 編輯時間 |
專輯表(album)結(jié)構(gòu)
字段 | 類型 | 注釋 |
id | int(11) | 單曲id |
singler_id | int(11) | 所屬歌手id |
name | varchar(50) | 專輯名稱 |
cover | varchar(255) | 專輯封面 |
desc | varchar(255) | 專輯簡介 |
single_num | int(11) | 單曲數(shù) |
lang | varchar(50) | 專輯語種 |
addtime | int(11) | 創(chuàng)建時間 |
updatetime | int(11) | 更新時間 |
創(chuàng)建表模型
在player工程目錄下的models.py中創(chuàng)建表模型。
專輯和單曲表關(guān)系為多對多,需要設(shè)置一個中間關(guān)系表;在django中多對多關(guān)系,不需要主動設(shè)置,會自動創(chuàng)建一個隱藏中間表。
內(nèi)容如下:
class Singe(models.Model):""" 單曲表 """name = models.CharField(max_length=50, help_text='請輸入單曲名稱')duration = models.IntegerField(help_text='請輸入歌曲時長(ms)')path = models.FileField(upload_to=upload_save_path, help_text='請上傳歌曲')lyric = models.FileField(upload_to=upload_save_path, help_text='請上傳歌曲單詞')addtime = models.DateTimeField(auto_now_add=True)updatetime = models.DateTimeField(auto_now=True)# 設(shè)置與歌手表關(guān)聯(lián)外鍵# 一對多外鍵設(shè)置在多的模型中singler = models.ForeignKey("Singler", on_delete=models.CASCADE)class Album(models.Model):""" 專輯表 """name = models.CharField(max_length=50, help_text='請輸入專輯名稱')cover = models.ImageField(upload_to=upload_save_path, help_text='請上傳專輯封面圖')desc = models.CharField(max_length=255, help_text='請輸入專輯描述')single_num = models.IntegerField(default=0, help_text='請輸入單曲數(shù)')single_lang = models.CharField(max_length=50, help_text='請輸入專輯語種')addtime = models.DateTimeField(auto_now_add=True)updatetime = models.DateTimeField(auto_now=True)# 設(shè)置與歌手表關(guān)聯(lián)外鍵 一對多 級聯(lián)刪除singler = models.ForeignKey("Singler", on_delete=models.CASCADE)# 設(shè)置與單曲表關(guān)聯(lián)外鍵 多對多Singe = models.ManyToManyField('Singe')
?
創(chuàng)建表
python manage.py makemigrationspython manage.py migrate
這兩條命令執(zhí)行結(jié)束后,數(shù)據(jù)庫增加player_album、player_singe表及關(guān)系表player_album_singe
表結(jié)構(gòu)如下:
CREATE TABLE `player_album` (`id` bigint(20) NOT NULL AUTO_INCREMENT,`name` varchar(50) NOT NULL,`cover` varchar(100) NOT NULL,`desc` varchar(255) NOT NULL,`single_num` int(11) NOT NULL,`single_lang` varchar(50) NOT NULL,`addtime` datetime(6) NOT NULL,`updatetime` datetime(6) NOT NULL,`singler_id` bigint(20) NOT NULL,PRIMARY KEY (`id`),KEY `player_album_singler_id_cde08698` (`singler_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;CREATE TABLE `player_singe` (`id` bigint(20) NOT NULL AUTO_INCREMENT,`name` varchar(50) NOT NULL,`duration` int(11) NOT NULL,`path` varchar(100) NOT NULL,`lyric` varchar(100) NOT NULL,`addtime` datetime(6) NOT NULL,`updatetime` datetime(6) NOT NULL,`singler_id` bigint(20) NOT NULL,PRIMARY KEY (`id`),KEY `player_singe_singler_id_103f9b74` (`singler_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;CREATE TABLE `player_album_singe` (`id` bigint(20) NOT NULL AUTO_INCREMENT,`album_id` bigint(20) NOT NULL,`singe_id` bigint(20) NOT NULL,PRIMARY KEY (`id`),UNIQUE KEY `player_album_Singe_album_id_singe_id_5df36ff3_uniq` (`album_id`,`singe_id`),KEY `player_album_Singe_album_id_2148d063` (`album_id`),KEY `player_album_Singe_singe_id_f3856b29` (`singe_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
?
后臺注冊表模型
在player目錄下admin.py中注冊單曲、專輯表模型到后臺。
增加自定義上傳文件路徑方法設(shè)置。
def upload_save_path(instance, filename):""" 上傳文件保存路徑 """return 'uploads/' + str(int(time.time())) + '/{0}'.format(filename)class Singe(models.Model):""" 單曲表 """name = models.CharField(max_length=50, help_text='請輸入單曲名稱')duration = models.IntegerField(help_text='請輸入歌曲時長(ms)')path = models.FileField(upload_to=upload_save_path, help_text='請上傳歌曲')lyric = models.FileField(upload_to=upload_save_path, help_text='請上傳歌曲單詞')addtime = models.DateTimeField(auto_now_add=True)updatetime = models.DateTimeField(auto_now=True)# 設(shè)置與歌手表關(guān)聯(lián)外鍵# 一對多外鍵設(shè)置在多的模型中singler = models.ForeignKey("Singler", on_delete=models.CASCADE)# 設(shè)置與專輯表關(guān)聯(lián)外鍵album = models.ForeignKey("Album", on_delete=models.CASCADE)class Album(models.Model):""" 專輯表 """name = models.CharField(max_length=50, help_text='請輸入專輯名稱')cover = models.ImageField(upload_to=upload_save_path, help_text='請上傳專輯封面圖')desc = models.CharField(max_length=255, help_text='請輸入專輯描述')single_num = models.IntegerField(default=0, help_text='請輸入單曲數(shù)')single_lang = models.CharField(max_length=50, help_text='請輸入專輯語種')addtime = models.DateTimeField(auto_now_add=True)updatetime = models.DateTimeField(auto_now=True)# 設(shè)置與歌手表關(guān)聯(lián)外鍵singler = models.ForeignKey("Singler", on_delete=models.CASCADE)admin.site.register(Singe, SingeAdmin)
admin.site.register(Album, AlbumAdmin)
效果:
外鍵的設(shè)置,主要在添加的時候進行下拉菜單關(guān)聯(lián)添加。
?
后臺首頁輪播圖表模塊開發(fā)
表結(jié)構(gòu)設(shè)計
字段 | 類型 | 注釋 |
id | int(11) | 自增id |
path | varchar(100) | 圖片路徑 |
href | varchar(100) | 跳轉(zhuǎn)路徑 |
?
創(chuàng)建表模型
自增id不需指定,默認(rèn)自動添加。
class Carousel(models.Model):""" 首頁輪播圖 """path = models.ImageField(upload_to=upload_save_path, help_text='請選擇上傳首頁輪播圖')href = models.CharField(max_length=100, help_text='請輸入點擊圖片后跳轉(zhuǎn)路徑')
創(chuàng)建表
python manage.py makemigrationspython manage.py migrate
執(zhí)行過程:
?
后臺注冊表模型
在player/admin.py中添加輪播表模型,并注冊。
引入表模型
from .models import Carousel
后臺自定義
class CarouselAdmin(admin.ModelAdmin):# 列表頁屬性def get_path(self):return self.pathget_path.short_description = '圖片路徑'def get_href(self):return self.hrefget_href.short_description = '跳轉(zhuǎn)路徑'# 顯示字段list_display = ['id', get_path, get_href]admin.site.register(Carousel, CarouselAdmin)
效果:
總結(jié)
還是創(chuàng)建表模型到后臺注冊流程,增加了自定義上傳文件設(shè)置,還有兩種外鍵設(shè)置的方式:分別為一對多和多對多類型,其中一對多設(shè)置刪除為級聯(lián)方式,也就是刪除一時多的一方也會被刪除。