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

Python Django フレームワークを使用して音楽 Web サイトを作成し、シリーズ 2 をベースに開発を続け、

この記事は主に、バックグラウンド シングル、アルバム、およびホームページのカルーセル チャート モジュールの開発について説明します。

目次

バックグラウンドシングル、アルバムリストモジュール開発

テーブル構造設計

単一テーブル (シングル) 構造

アルバムテーブル(アルバム)の構造

テーブルモデルの作成

テーブルを作成する

バックグラウンドレジストリモデル

背景ホームページのカルーセル チャート モジュールの開発

テーブル構造設計

テーブルモデルの作成

テーブルを作成する

バックグラウンドレジストリモデル

テーブルモデルをインポートする

背景のカスタマイズ

要約する


バックグラウンドシングル、アルバムリストモジュール開発

テーブル構造設計

単一テーブル (シングル) 構造

分野

タイプ

注記

ID

int(11)

単一ID

シド

int(11)

歌手ID

援助

int(11)

アルバムID

名前

varchar(50)

単一の名前

間隔

int(11)

継続時間 (ミリ秒)

パス

varchar(200)

曲ファイルのリンク

歌詞

varchar(200)

歌詞ファイルのリンク

追加時間

int(11)

公開時間

更新時間

int(11)

編集時間

アルバムテーブル(アルバム)の構造

分野

タイプ

注記

ID

int(11)

単一ID

単一ID

int(11)

歌手ID

名前

varchar(50)

アルバム名

カバー

varchar(255)

アルバムのジャケット

説明

varchar(255)

アルバム紹介

単一番号

int(11)

シングルの数

ラング

varchar(50)

アルバム言語

追加時間

int(11)

作成時間

更新時間

int(11)

更新時間

テーブルモデルの作成

プレーヤーのプロジェクト ディレクトリの下にある models.py にテーブル モデルを作成します。

アルバムと単一のテーブル間の関係は多対多であり、中間の関係テーブルを設定する必要があります。django では、多対多の関係を積極的に設定する必要はなく、非表示の中間テーブルが設定されます。自動的に作成されます。

内容は以下の通りです。

class Singe(models.Model):
    """ 单曲表 """

    name = models.CharField(max_length=50, help_text='请输入单曲名称')
    duration = models.IntegerField(help_text='请输入歌曲时长(ms)')
    path = models.FileField(upload_to=upload_save_path, help_text='请上传歌曲')
    lyric = models.FileField(upload_to=upload_save_path, help_text='请上传歌曲单词')
    addtime = models.DateTimeField(auto_now_add=True)
    updatetime = models.DateTimeField(auto_now=True)

    # 设置与歌手表关联外键
    # 一对多外键设置在多的模型中
    singler = models.ForeignKey("Singler", on_delete=models.CASCADE)


class Album(models.Model):
    """ 专辑表 """

    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, help_text='请输入单曲数')
    single_lang = models.CharField(max_length=50, help_text='请输入专辑语种')
    addtime = models.DateTimeField(auto_now_add=True)
    updatetime = models.DateTimeField(auto_now=True)

    # 设置与歌手表关联外键 一对多 级联删除
    singler = models.ForeignKey("Singler", on_delete=models.CASCADE)

    # 设置与单曲表关联外键 多对多
    Singe = models.ManyToManyField('Singe')

テーブルを作成する

python manage.py makemigrations

python manage.py migrate

これら 2 つのコマンドを実行すると、データベースに player_album、player_singe テーブル、およびリレーショナル テーブル player_album_singe が追加されます。

テーブル構造は次のとおりです。

CREATE TABLE `player_album` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  `cover` varchar(100) NOT NULL,
  `desc` varchar(255) NOT NULL,
  `single_num` int(11) NOT NULL,
  `single_lang` varchar(50) NOT NULL,
  `addtime` datetime(6) NOT NULL,
  `updatetime` datetime(6) NOT NULL,
  `singler_id` bigint(20) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `player_album_singler_id_cde08698` (`singler_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;

CREATE TABLE `player_singe` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  `duration` int(11) NOT NULL,
  `path` varchar(100) NOT NULL,
  `lyric` varchar(100) NOT NULL,
  `addtime` datetime(6) NOT NULL,
  `updatetime` datetime(6) NOT NULL,
  `singler_id` bigint(20) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `player_singe_singler_id_103f9b74` (`singler_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;

CREATE TABLE `player_album_singe` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `album_id` bigint(20) NOT NULL,
  `singe_id` bigint(20) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `player_album_Singe_album_id_singe_id_5df36ff3_uniq` (`album_id`,`singe_id`),
  KEY `player_album_Singe_album_id_2148d063` (`album_id`),
  KEY `player_album_Singe_singe_id_f3856b29` (`singe_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;

バックグラウンドレジストリモデル

シングルおよびアルバムのテーブル モデルを、プレーヤー ディレクトリ下の admin.py のバックグラウンドに登録します。

カスタムアップロードファイルパスメソッド設定を追加します。

def upload_save_path(instance, filename):
    """ 上传文件保存路径 """

    return 'uploads/' + str(int(time.time())) + '/{0}'.format(filename)


class Singe(models.Model):
    """ 单曲表 """

    name = models.CharField(max_length=50, help_text='请输入单曲名称')
    duration = models.IntegerField(help_text='请输入歌曲时长(ms)')
    path = models.FileField(upload_to=upload_save_path, help_text='请上传歌曲')
    lyric = models.FileField(upload_to=upload_save_path, help_text='请上传歌曲单词')
    addtime = models.DateTimeField(auto_now_add=True)
    updatetime = models.DateTimeField(auto_now=True)

    # 设置与歌手表关联外键
    # 一对多外键设置在多的模型中
    singler = models.ForeignKey("Singler", on_delete=models.CASCADE)
    # 设置与专辑表关联外键
    album = models.ForeignKey("Album", on_delete=models.CASCADE)


class Album(models.Model):
    """ 专辑表 """

    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, help_text='请输入单曲数')
    single_lang = models.CharField(max_length=50, help_text='请输入专辑语种')
    addtime = models.DateTimeField(auto_now_add=True)
    updatetime = models.DateTimeField(auto_now=True)

    # 设置与歌手表关联外键
    singler = models.ForeignKey("Singler", on_delete=models.CASCADE)

admin.site.register(Singe, SingeAdmin)
admin.site.register(Album, AlbumAdmin)

効果:

外部キーの設定は主に、追加時にドロップダウンメニューの関連付けを追加します。

背景ホームページのカルーセル チャート モジュールの開発

テーブル構造設計

分野

タイプ

注記

ID

int(11)

自己インクリメント ID

パス

varchar(100)

画像パス

href

varchar(100)

ジャンプパス

テーブルモデルの作成

自動インクリメント ID を指定する必要はありません。デフォルトで自動的に追加されます。

class Carousel(models.Model):
    """ 首页轮播图 """

    path = models.ImageField(upload_to=upload_save_path, help_text='请选择上传首页轮播图')
    href = models.CharField(max_length=100, help_text='请输入点击图片后跳转路径')

テーブルを作成する

python manage.py makemigrations

python manage.py migrate

実装プロセス:

バックグラウンドレジストリモデル

player/admin.pyにカルーセルモデルを追加して登録します。

テーブルモデルをインポートする

from .models import Carousel

背景のカスタマイズ

class CarouselAdmin(admin.ModelAdmin):


    # 列表页属性
    def get_path(self):
        return self.path

    get_path.short_description = '图片路径'

    def get_href(self):
        return self.href

    get_href.short_description = '跳转路径'

    # 显示字段
    list_display = ['id', get_path, get_href]


admin.site.register(Carousel, CarouselAdmin)

効果:

要約する

または、バックグラウンド登録プロセスにテーブル モデルを作成し、カスタム アップロード ファイル設定と 2 つの外部キー設定 (1 対多タイプと多対多タイプ) を追加します。1 対多設定はカスケード方式として削除されます。 、また、一時的に複数のパーティーを削除しても、それも削除されます。

おすすめ

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