Django は音楽 Web サイトを実装します⑽

Python Django フレームワークを使用して音楽 Web サイトを作成し、

今回は一部機能の実装と、バックグラウンドでの楽曲タイプや楽曲リスト機能の独自機能の表示の最適化を中心に説明します。

目次

ソングタイプ機能の最適化

新規編集

入力項目のタイトル表示を最適化する

親タイプの表示がドロップダウン メニューに変更されます。

リスト表示

親タイプの表示名

フィルターは親タイプを追加します

ソングリスト機能の最適化

新規編集

歌手名を追加する単一オプション

ソングリストタイプオプション名の変更

フィールド表示名の変更

再生音量が編集不可に変更されました

曲リストに説明フィールドを追加

まずテーブルモデルに説明フィールドを追加します。

テーブル移行の実行

リスト表示

再生音量を表示、時間を追加

編集時間、プレイリストの説明を表示

プレイリストのカバーが表示画像に変更されました

要約する


ソングタイプ機能の最適化

新規編集

入力項目のタイトル表示を最適化する

表示フィールド名を表示名に変更します

内容は以下の通りです。

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='父类型')

効果:

親タイプの表示がドロップダウン メニューに変更されます。

選択パラメーターを親タイプのフィールドに追加すると、それがドロップダウン メニュー オプションに変わります。フィールドのタイプはタプルであることに注意してください。

内容は以下の通りです。

categoryChoice = [
    (0, '默认'), 
    (1, '主题'), 
    (2, '心情'),
    (3, '场景'),
    (4, '年代'),
    (5, '曲风流派'), 
    (6, '语言')
]
pid = models.IntegerField(
    '父类型', 
    default=0, 
    help_text='父类型',
    choices=categoryChoice
)

効果:

本来はテーブルモデルを作成して独自の親型構成リストを呼び出して表示・追加したかったのですが、テーブルモデルを作成していない状態ではテーブルモデルが存在しないため呼び出せないことが判明しました。とりあえず、固定の親タイプを作成し、サブタイプを追加します。

リスト表示

親タイプの表示名

デフォルトでは、表示される親タイプはタイプ ID であり、代わりにタイプ名が表示されます。

player/admin.pyのソングタイプバックグラウンドクラスのpidフィールドに返される内容を変更します。

class SongCategoryAdmin(admin.ModelAdmin):
    """ 后台歌单类型类 """

    def get_name(self):
        return self.name

    get_name.short_description = '类型名称'

    def get_pid(self):
        categoryChoice = [
            (0, '默认'),
            (1, '主题'),
            (2, '心情'),
            (3, '场景'),
            (4, '年代'),
            (5, '曲风流派'),
            (6, '语言')
        ]
        for index, item in categoryChoice:
            if index == self.pid:
                return item

    get_pid.short_description = '父类型'

効果:

フィルターは親タイプを追加します

pid フィールド設定がフィルターに追加され、名前の前に設定できます。

内容は以下の通りです。

list_filter = ['pid', 'name']

効果:

ソングリスト機能の最適化

新規編集

歌手名を追加する単一オプション

単一リストの文字列の戻り形式を変更します。

内容は以下の通りです。

class Singe(BaseModel):
    """ 单曲表 """

    ......

    def __str__(self):
        return str(self.name) + ' - ' + str(self.singler)

効果:

ソングリストタイプオプション名の変更

デフォルトの表示オブジェクトでは、ソング タイプ テーブル モデル クラスを変更し、__str__ メソッドを追加し、戻り形式を設定する必要があります。

内容は以下の通りです。

def __str__(self):
    return self.name

効果:

フィールド表示名の変更

デフォルトではフィールド名が表示されますが、理解しやすく編集しやすいフィールド説明の内容に変更する必要があります。

 

player/models.py の曲リスト モデル クラスを変更し、フィールドの verbose_name 属性を設定します。

内容は以下の通りです。

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('默认', default=0, choices=[('0', '是'), ('1', '否')], help_text='是否默认')

    # 歌曲类型与歌单表 多对多关系
    category = models.ManyToManyField('SongCategory', verbose_name='所属类型')

    # 歌单表与单曲表多对多关系
    singe = models.ManyToManyField('Singe', verbose_name='包含单曲')

効果:

再生音量が編集不可に変更されました

再生音量は、プレイリストを表示した後にフロントエンドによって増加され、バックグラウンドで編集することはできません。

再生音量フィールドの編集可能をFalseに設定する必要があります。

内容は以下の通りです。

playnum = models.IntegerField(default=0, editable=False)

保存後は、追加編集時の再生音量記入項目は表示されなくなります。

曲リストに説明フィールドを追加

テーブルを設計するときに曲リストの説明フィールドがなかったことに今気づきましたので、追加します。

まずテーブルモデルに説明フィールドを追加します。

内容は以下の通りです。

esc = models.TextField('歌单描述', default='', max_length=200, help_text='请输入歌单描述')

注: デフォルトを設定する必要があります。そうしないと実行できません。

テーブル移行の実行

テーブルモデルを変更した後は、テーブル移行ファイルを作成し、テーブル移行を実行する必要があります。

python manage.py makemigrations
python manage.py migrate

データテーブルにdescフィールドを追加

リスト表示

再生音量を表示、時間を追加

編集時間、プレイリストの説明を表示

player/admin.pyの曲リストテーブルのバックグラウンドクラスを変更します。

内容は以下の通りです。

class SongSheetAdmin(admin.ModelAdmin):
    """ 后台歌单类 """

    def get_name(self):
        return self.name

    get_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.desc

    get_desc.short_description = '歌单描述'


    def get_playnum(self):
        return self.playnum

    get_playnum.short_description = '播放量'

    def get_addtime(self):
        return self.addtime

    get_addtime.short_description = '创建时间'

    def get_updatetime(self):
        return self.updatetime

    get_updatetime.short_description = '编辑时间'

    # 显示字段
    list_display = ['id', get_name, get_cover, get_desc, get_playnum, get_addtime, get_updatetime]

効果:

プレイリストのカバーが表示画像に変更されました

player/admin.pyの曲リストテーブルのbackgroundクラスを変更し、coverメソッドの戻り値をimg要素に変更します。

内容は以下の通りです。

def get_cover(self):
    return format_html(
        '<img src="/media/{}" width="100px" height="100px"/>',
        self.cover,
    )

 効果:

要約する

この時点でバックグラウンド機能の開発と最適化は基本的に完了し、その後フロントエンドの開発が始まります。

おすすめ

転載: blog.csdn.net/json_ligege/article/details/132212129