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 対多設定はカスケード方式として削除されます。 、また、一時的に複数のパーティーを削除しても、それも削除されます。