使用Python Django框架制作一個音樂網站,
本篇主要是后臺對歌手原有實現(xiàn)功能的基礎上進行優(yōu)化處理。
?
目錄
新增編輯
表字段名稱修改
隱藏單曲、專輯數(shù)
姓名首字母
安裝xpinyin
獲取姓名首字母
重寫保存方法
列表顯示
圖片顯示處理
引入函數(shù)
路徑改為顯示圖片
修改列表默認設置
修改列表排序
總結
?
新增編輯
表字段名稱修改
新增、編輯頁面字段顯示為數(shù)據(jù)表設計字段,改為中文顯示。
在Model中直接修改Singler字段,增加verbose_name參數(shù)。
verbose_name:admin模式中字段的顯示名稱。
內容如下:
class Singler(models.Model):
""" 歌手表模型 """
class Meta:
verbose_name = '歌手'
verbose_name_plural = '歌手'
name = models.CharField(max_length=50, help_text='請輸入歌手名稱', verbose_name='姓名')
first_letter = models.CharField(max_length=15, help_text='請輸入歌手名稱首字母', verbose_name='姓名首字母')
# 設置上傳位置
portrait = models.ImageField(upload_to=upload_save_path, help_text='請上傳歌手照片', verbose_name='照片')
birthday = models.DateField(default=date.today, help_text='請選擇歌手生日', blank=True, verbose_name='生日')
height = models.IntegerField(help_text='請輸入歌手身高(cm)', default=0, blank=True, verbose_name='身高(cm)')
weight = models.IntegerField(help_text='請輸入歌手體重(kg)', default=0, blank=True, verbose_name='體重(kg)')
constellation = models.CharField(max_length=50, help_text='請輸入歌手星座', verbose_name='星座')
# editable=False 后臺將不再顯示
single_num = models.IntegerField(default=0, editable=False)
album_num = models.IntegerField(default=0, editable=False)
desc = models.TextField(help_text='請輸入歌手簡介', verbose_name='簡介')
效果:
?
隱藏單曲、專輯數(shù)
歌手所擁有的單曲數(shù)和專輯數(shù),應該是添加、刪除單曲或專輯時動態(tài)計算出的數(shù)值,不應該是后臺添加的,之前不會隱藏,經過查看表模型參數(shù)找到了設置方法。
editable:默認值為True;
如果值為Fasle,則在admin模式下不能改寫。
修改歌手表模型單曲數(shù)和專輯數(shù)字段,設置editable參數(shù)。
內容如下:
single_num = models.IntegerField(default=0, editable=False)
album_num = models.IntegerField(default=0, editable=False)
刷新后,新增歌手詳情單曲數(shù)和專輯數(shù)設置不再顯示。
姓名首字母
原有姓名首字母需要自己手動輸入,改為程序自動通過輸入的歌手名稱取得姓名首字母。
安裝xpinyin
需要下載三方庫,安裝命令:
pip install xpinyin
獲取姓名首字母
在player/models.py中處理獲取首字母并設置入庫操作。
from xpinyin import Pinyin
def get_first_letter(name):
""" 獲取姓名中的首字母 """
obj = Pinyin()
name_pinyin = obj.get_pinyin(name, '')
return name_pinyin[0]
重寫保存方法
在Singler類中,重寫父類保存方法,增加設置歌手姓名首字母。
并把首字母字段設置為admin不可編輯。
class Singler(models.Model):
""" 歌手表模型 """
......
def save(self, force_insert=False, force_update=False, using=None,
update_fields=None):
""" 重寫save方法 """
self.first_letter = get_first_letter(self.name)
super().save()
?
列表顯示
圖片顯示處理
修改后臺歌手表,在player中的admins.py中的SinglerAdmin。
需要使用format_html()函數(shù)。
?
引入函數(shù)
from django.utils.html import format_html
路徑改為顯示圖片
class SinglerAdmin(admin.ModelAdmin):
# 列表頁屬性
def get_name(self):
return self.name
get_name.short_description = '歌手名稱'
def get_portrait(self):
return format_html(
'<img src="/{}" width="100px" height="100px"/>',
self.portrait,
)
原因:django從view向template傳遞HTML字符串的時候,django默認不渲染此HTML,原因是為了防止這段字符串里面有惡意攻擊的代碼。所以要把列表的圖片路徑改為顯示圖片,需要使用函數(shù),通過函數(shù)的{}占位符,把圖片路徑賦值給HTML元素img。
效果:
修改列表默認設置
適用于列表某字段為空時,設置顯示內容。
比如歌手的身高體重都為默認0時。
?
修改player/admin.py中對身高和體重的顯示處理。
內容如下:
def get_height(self):
if self.height < 1:
return '——'
else:
return str(self.height) + 'cm'
get_height.short_description = '身高'
def get_weight(self):
if self.weight < 1:
return '——'
else:
return str(self.weight) + 'kg'
效果:
修改列表排序
通過Meta類來給模型賦予元數(shù)據(jù),設定ordering排序。文章來源:http://www.zghlxwxcb.cn/news/detail-632333.html
class Singler(models.Model):
""" 歌手表模型 """
class Meta:
verbose_name = '歌手'
verbose_name_plural = '歌手'
# 正序
ordering = ['first_letter']
# 倒序
# ordering = ['-first_letter']
總結
對后臺歌手模塊進行部分功能優(yōu)化,主要通過新增編輯和列表兩方面來進行優(yōu)化。文章來源地址http://www.zghlxwxcb.cn/news/detail-632333.html
到了這里,關于Django實現(xiàn)音樂網站 ⑺的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!