Cree un sitio web de música utilizando el marco Python Django ,
Este artículo trata principalmente sobre la implementación y optimización de visualización de algunas funciones sobre la base de las funciones originales del single en segundo plano.
Tabla de contenido
Modificación de la pantalla desplegable del cantante
establecer la duración de la canción
Modificación del campo de duración de la canción
Aumentar el número de cantantes solteros.
Consultar el número de cantantes solteros
obtener el nombre del cantante
Establecer visualización del nombre del artista
la lista muestra la duración de la canción
Modelo de mesa individual en su conjunto
Nueva edición
Modificación de la pantalla desplegable del cantante
Al agregar, seleccione un cantante para mostrar como un objeto, y el cantante no se puede confirmar.
Necesita modificar el modelo de tabla Singler y agregar el método __str__
El contenido es el siguiente:
def __str__(self):
""" 修改返回格式 """
return self.name
Efecto:
establecer la duración de la canción
El valor de la duración de la canción cambia de llenar el cuadro de entrada a la duración establecida en segundo plano para leer el archivo de la canción.
Instalar la biblioteca eyed3
El comando es el siguiente:
pip install eyed3
Obtener duración de mp3
El contenido es el siguiente:
import eyed3
def get_duration_mp3(file_path):
""" 获取mp3音频文件时长 """
info = eyed3.load(file_path)
return info.info.time_secs
Modificación del campo de duración de la canción
Modificar la clase de modelo único
Primero, establezca el campo de duración de la canción en admin y no se puede volver a escribir.
duration = models.IntegerField(editable=False)
Anular el método de guardar
Dentro del método de guardar anulado, primero debe llamar al método de guardar de la clase principal y luego el archivo se guardará en la ruta correspondiente.
Después de eso, habrá una ruta de archivo. Después de leer el archivo MP3 para obtener la longitud del archivo, guárdelo nuevamente; en cuanto al método simple, porque todavía estoy aprendiendo sobre django, aún no lo he encontrado.
def save(self, force_insert=False, force_update=False, using=None,
update_fields=None):
""" 重写save方法 处理歌曲时长 """
super().save()
#get_singe_singler_num(self.singler)
path_name = str(self.path.name)
if path_name.endswith(".mp3"):
save_path = os.path.join(settings.MEDIA_ROOT, path_name)
print(save_path)
self.duration = get_duration_mp3(save_path)
print(self.duration)
super().save()
Aumentar el número de cantantes solteros.
Es necesario aumentar el número de singles del cantante al sumar los singles asociados del cantante correspondiente.
Consultar el número de cantantes solteros
Agregue un nuevo método en player/models.py para consultar la cantidad de sencillos que posee el cantante correspondiente a través de la identificación de clave externa del cantante en la tabla de sencillos.
El contenido es el siguiente:
def get_singe_singler_num(singler_id):
"""
获取单曲表中所属歌手数
:param singler_id:
:return:
"""
return Singe.objects.filter(singler_id=singler_id).count()
Número de singles de cantantes simultáneos
Al guardar un sencillo, procese la cantidad de sencillos de cantantes, modifique el método de guardado del modelo de tabla única y agregue el procesamiento antes del guardado final.
El contenido es el siguiente:
def save(self, force_insert=False, force_update=False, using=None,
update_fields=None):
""" 重写save方法 处理歌曲时长 歌手单曲数量 """
super().save()
path_name = str(self.path.name)
if path_name.endswith(".mp3"):
save_path = os.path.join(settings.MEDIA_ROOT, path_name)
self.duration = get_duration_mp3(save_path)
# 获取相应歌手单曲数
singe_num = get_singe_singler_num(self.singler_id)
# 更新相应歌手的单曲数
Singler.objects.filter(pk=self.singler_id).update(singe_num=singe_num)
super().save()
pantalla de lista
mostrar el nombre del artista
La lista única está asociada con la identificación de la clave externa del cantante. Si es necesario mostrar el nombre del cantante, debe modificarse, de lo contrario, solo se mostrará la identificación de la clave externa.
obtener el nombre del cantante
Configure el método en player/admin.py para consultar la información del cantante correspondiente a través de la identificación de la clave externa.
El contenido es el siguiente:
def get_singler_name(id):
"""
获取歌手名称
:param id:歌手id
:return:
"""
return Singler.objects.get(pk=id)
Establecer visualización del nombre del artista
Modifique el procesamiento de visualización personalizado del campo de clave externa en la clase única de fondo.
class SingeAdmin(admin.ModelAdmin):
""" 后台单曲类 """
......
def get_singler_id(self):
return get_singler_name(self.singler_id)
get_singler_id.short_description = '歌手'
Efecto:
la lista muestra la duración de la canción
Modifique la categoría individual en el fondo y agregue un campo para mostrar la duración de la canción.
def get_duration(self):
return self.duration
get_duration.short_description = '时长(s)'
# 显示字段
list_display = ['id', get_name, get_singler_id, get_duration, get_addtime, get_updatetime]
Modelo de mesa individual en su conjunto
class Album(BaseModel):
""" 专辑表 """
class Meta:
verbose_name = '专辑'
verbose_name_plural = '专辑'
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, editable=False)
langs = [('国语', '国语'), ('普通话', '普通话'), ('英语', '英语'), ('日韩', '日韩')]
single_lang = models.CharField('专辑语种', max_length=50, choices=langs, help_text='请选择专辑语种')
# 设置与歌手表关联外键 一对多
singler = models.ForeignKey("Singler", on_delete=models.CASCADE, verbose_name='歌手', help_text='请选择歌手')
# 设置与单曲表关联外键 多对多
Singe = models.ManyToManyField('Singe', verbose_name='单曲', help_text='请选择单曲')
def save(self, force_insert=False, force_update=False, using=None,
update_fields=None):
""" 重写save方法 处理单曲数和歌手专辑数 """
# 获取选中的单曲字典
sing_set = self.Singe.all()
single_num = len(sing_set)
# 更新单曲数
self.single_num = single_num
# 获取所属歌手专辑数
album_num = get_album_singler_num(self.singler_id)
super().save()
# 更新歌手表-专辑数
Singler.objects.filter(pk=self.singler_id).update(album_num=album_num)
Resumir
Optimice algunas funciones del módulo único de fondo, principalmente agregando dos aspectos de edición y listado.