Django implementa sitio web de música⑻

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

Nueva edición

Modificación de la pantalla desplegable del cantante

establecer la duración de la canción

Instalar la biblioteca eyed3

Obtener duración de mp3

Modificación del campo de duración de la canción

Anular el método de guardar

Aumentar el número de cantantes solteros.

Consultar el número de cantantes solteros

pantalla de lista

mostrar el nombre del artista

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

Resumir


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.

Supongo que te gusta

Origin blog.csdn.net/json_ligege/article/details/132173071
Recomendado
Clasificación