Cree un sitio web de música utilizando el marco Python Django ,
Este artículo es principalmente para optimizar las funciones de implementación originales del cantante en segundo plano.
Tabla de contenido
Modificación del nombre del campo de la tabla
Ocultar número de sencillos y álbumes
Procesamiento de visualización de imágenes
Cambiar la ruta para mostrar la imagen
Modificar valores predeterminados de la lista
Modificar clasificación de lista
Nueva edición
Modificación del nombre del campo de la tabla
Los campos de página agregados y editados se muestran como campos de diseño de tabla de datos, que se muestran en chino.
Modifique el campo Singler directamente en el modelo y agregue el parámetro verbose_name.
verbose_name: el nombre para mostrar del campo en el esquema de administración.
El contenido es el siguiente:
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='简介')
Efecto:
Ocultar número de sencillos y álbumes
La cantidad de sencillos y álbumes que posee un cantante debe ser un valor calculado dinámicamente al agregar o eliminar un sencillo o álbum, y no debe agregarse en segundo plano. No se ocultará antes, y el método de configuración se puede encontrar marcando los parámetros del modelo de tabla.
editable: el valor predeterminado es Verdadero;
Si el valor es Fasle, no se puede volver a escribir en el modo de administración.
Modifique los campos de número único y número de álbum del modelo de tabla de cantantes y establezca el parámetro editable.
El contenido es el siguiente:
single_num = models.IntegerField(default=0, editable=False)
album_num = models.IntegerField(default=0, editable=False)
Después de actualizar, ya no se mostrarán los ajustes para la cantidad de sencillos y la cantidad de álbumes de los detalles del artista recién agregado.
iniciales
Las iniciales originales deben ingresarse manualmente, pero el programa obtiene automáticamente las iniciales del nombre del cantante ingresado.
instalar xpinyin
Debe descargar la biblioteca de tres partes, instalar el comando:
pip install xpinyin
obtener iniciales
Obtenga la primera letra y configure la operación de almacenamiento en player/models.py.
from xpinyin import Pinyin
def get_first_letter(name):
""" 获取姓名中的首字母 """
obj = Pinyin()
name_pinyin = obj.get_pinyin(name, '')
return name_pinyin[0]
anular el método de guardar
En la clase Singler, reescriba el método save de la clase principal y agregue las iniciales del nombre del cantante.
Y configure el campo de la primera letra como administrador no editable.
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()
pantalla de lista
Procesamiento de visualización de imágenes
Modifique la tabla de cantantes de fondo, SinglerAdmin en admins.py en el reproductor.
Es necesario utilizar la función format_html().
función de importación
from django.utils.html import format_html
Cambiar la ruta para mostrar la imagen
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,
)
Motivo: cuando django pasa la cadena HTML de la vista a la plantilla, django no muestra el HTML de forma predeterminada. El motivo es evitar el código de ataque malicioso en esta cadena. Por lo tanto, para cambiar la ruta de la imagen de la lista para mostrar imágenes, debe usar una función para asignar la ruta de la imagen al elemento HTML img a través del marcador de posición {} de la función.
Efecto:
Modificar valores predeterminados de la lista
Es adecuado para configurar el contenido de la pantalla cuando un determinado campo de la lista está vacío.
Por ejemplo, la altura y el peso del cantante están configurados en 0 de forma predeterminada.
Modifique el procesamiento de visualización de altura y peso en player/admin.py.
El contenido es el siguiente:
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'
Efecto:
Modificar clasificación de lista
Utilice la clase Meta para asignar metadatos al modelo y establecer el orden.
class Singler(models.Model):
""" 歌手表模型 """
class Meta:
verbose_name = '歌手'
verbose_name_plural = '歌手'
# 正序
ordering = ['first_letter']
# 倒序
# ordering = ['-first_letter']
Resumir
Optimice algunas funciones del módulo de cantante de fondo, principalmente agregando dos aspectos de edición y listado.