拉薩網(wǎng)站建設(shè)seo網(wǎng)站建設(shè)
使用Python Django框架制作一個(gè)音樂網(wǎng)站,
本篇主要是后臺(tái)對歌曲類型、歌單功能原有功能進(jìn)行部分功能實(shí)現(xiàn)和顯示優(yōu)化。
目錄
歌曲類型功能優(yōu)化
新增編輯
優(yōu)化輸入項(xiàng)標(biāo)題顯示
父類型顯示改為下拉菜單
列表顯示
父類型顯示名稱
過濾器增加父類型
歌單表功能優(yōu)化
新增編輯
單曲選項(xiàng)增加歌手名稱
歌單類型選項(xiàng)名稱修改
字段顯示名稱修改
播放量改為不可編輯
歌單增加描述字段
首先表模型中增加描述字段
執(zhí)行表遷移
列表顯示
顯示播放量、添加時(shí)間
顯示編輯時(shí)間、歌單描述
歌單封面改為顯示圖片
總結(jié)
歌曲類型功能優(yōu)化
新增編輯
優(yōu)化輸入項(xiàng)標(biāo)題顯示
把顯示字段名稱改為顯示名稱
內(nèi)容如下:
class SongCategory(models.Model):""" 歌曲類型表 """class Meta:verbose_name = '歌曲類型'verbose_name_plural = '歌曲類型'name = models.CharField('類型名稱', max_length=100, help_text='請輸入類型名稱')pid = models.IntegerField('父類型id', default=0, help_text='父類型')
效果:
父類型顯示改為下拉菜單
父類型字段增加choice參數(shù),就可變成下拉菜單選項(xiàng),需要注意字段類型為tuple。
內(nèi)容如下:
categoryChoice = [(0, '默認(rèn)'), (1, '主題'), (2, '心情'),(3, '場景'),(4, '年代'),(5, '曲風(fēng)流派'), (6, '語言')
]
pid = models.IntegerField('父類型', default=0, help_text='父類型',choices=categoryChoice
)
效果:
原本想做成表模型調(diào)用自己的父類型組成列表來展示和添加;結(jié)果發(fā)現(xiàn)表模型沒創(chuàng)建時(shí)候,這個(gè)表模型是不存在的,也就無法調(diào)用,暫時(shí)先做成固定父類型,添加子類型。
列表顯示
父類型顯示名稱
默認(rèn)顯示父類型是類型id,改為顯示類型名稱。
修改player/admin.py中的歌曲類型后臺(tái)類中對pid字段返回內(nèi)容。
class SongCategoryAdmin(admin.ModelAdmin):""" 后臺(tái)歌單類型類 """def get_name(self):return self.nameget_name.short_description = '類型名稱'def get_pid(self):categoryChoice = [(0, '默認(rèn)'),(1, '主題'),(2, '心情'),(3, '場景'),(4, '年代'),(5, '曲風(fēng)流派'),(6, '語言')]for index, item in categoryChoice:if index == self.pid:return itemget_pid.short_description = '父類型'
效果:
過濾器增加父類型
過濾器中增加pid字段設(shè)置,可以設(shè)置在name的前面。
內(nèi)容如下:
list_filter = ['pid', 'name']
效果:
歌單表功能優(yōu)化
新增編輯
單曲選項(xiàng)增加歌手名稱
修改單曲表字符串返回格式。
內(nèi)容如下:
class Singe(BaseModel):""" 單曲表 """......def __str__(self):return str(self.name) + ' - ' + str(self.singler)
效果:
歌單類型選項(xiàng)名稱修改
默認(rèn)顯示對象,需要修改歌曲類型表模型類,增加__str__方法,設(shè)置返回格式。
內(nèi)容如下:
def __str__(self):return self.name
效果:
字段顯示名稱修改
默認(rèn)顯示字段名稱,需要改成字段表述的內(nèi)容,這樣便于理解和編輯。
?
修改player/models.py中歌單表模型類,設(shè)置字段的verbose_name屬性。
內(nèi)容如下:
class SongSheet(BaseModel):""" 歌單表 """class Meta:verbose_name = '歌單'verbose_name_plural = '歌單'name = models.CharField('歌單名稱', max_length=100, help_text='請輸入歌單名稱')cover = models.ImageField('歌單封面圖',upload_to=upload_save_path, help_text='請上傳歌單封面圖')playnum = models.IntegerField('播放量', default=0, help_text='請輸入播放量')is_default = models.IntegerField('默認(rèn)', default=0, choices=[('0', '是'), ('1', '否')], help_text='是否默認(rèn)')# 歌曲類型與歌單表 多對多關(guān)系category = models.ManyToManyField('SongCategory', verbose_name='所屬類型')# 歌單表與單曲表多對多關(guān)系singe = models.ManyToManyField('Singe', verbose_name='包含單曲')
效果:
播放量改為不可編輯
播放量是由前端查看歌單后增加數(shù)量,后臺(tái)不能編輯。
需要設(shè)定播放量字段的editable為False。
內(nèi)容如下:
playnum = models.IntegerField(default=0, editable=False)
保存后,新增和編輯中播放量填寫項(xiàng)不再顯示。
歌單增加描述字段
剛發(fā)現(xiàn)設(shè)計(jì)表時(shí)候沒有歌單描述字段,現(xiàn)在加上。
首先表模型中增加描述字段
內(nèi)容如下:
esc = models.TextField('歌單描述', default='', max_length=200, help_text='請輸入歌單描述')
注意:需要設(shè)置默認(rèn),否則無法執(zhí)行。
執(zhí)行表遷移
表模型發(fā)生改變后,需要?jiǎng)?chuàng)建表遷移文件和執(zhí)行表遷移。
python manage.py makemigrations
python manage.py migrate
數(shù)據(jù)表增加desc字段
列表顯示
顯示播放量、添加時(shí)間
顯示編輯時(shí)間、歌單描述
修改player/admin.py中歌單表后臺(tái)類。
內(nèi)容如下:
class SongSheetAdmin(admin.ModelAdmin):""" 后臺(tái)歌單類 """def get_name(self):return self.nameget_name.short_description = '類型名稱'def get_cover(self):return format_html('<img src="/media/{}" width="100px" height="100px"/>',self.cover,)get_cover.short_description = '歌單封面'def get_desc(self):return self.descget_desc.short_description = '歌單描述'def get_playnum(self):return self.playnumget_playnum.short_description = '播放量'def get_addtime(self):return self.addtimeget_addtime.short_description = '創(chuàng)建時(shí)間'def get_updatetime(self):return self.updatetimeget_updatetime.short_description = '編輯時(shí)間'# 顯示字段list_display = ['id', get_name, get_cover, get_desc, get_playnum, get_addtime, get_updatetime]
效果:
歌單封面改為顯示圖片
修改player/admin.py中歌單表后臺(tái)類;把封面方法返回內(nèi)容改為img元素。
內(nèi)容如下:
def get_cover(self):return format_html('<img src="/media/{}" width="100px" height="100px"/>',self.cover,)
?效果:
總結(jié)
至此后臺(tái)功能開發(fā)和優(yōu)化算基本完成,之后開始前端方面開發(fā)。