2/1~2/9일까지 django를 활용한 프로젝트 제작 중이다.
프로젝트 주제는 음원 사이트이다.
요구사항으로는
이를 구현하기 위해서 5개의 테이블을 설계하였다.
class Category(models.Model):
name = models.CharField(max_length=50, help_text="음악 장르를 입력하세요")
def __str__(self):
return self.name
class Music(models.Model):
music_no = models.AutoField(primary_key=True)
music_name = models.CharField(max_length=20)
music_artist = models.ForeignKey("Artist", related_name="artist", on_delete=models.CASCADE)
music_composer = models.CharField(max_length = 15)
music_lyricsist = models.CharField(max_length = 15)
music_lyrics = models.TextField()
music_file = models.FileField(default='')
def __str__(self):
return self.music_name
class Artist(models.Model):
artist_no = models.AutoField(primary_key=True)
artist_name = models.CharField(max_length=15)
artist_category = models.ManyToManyField(Category, help_text="음악 장르를 설정하세요")
def __str__(self):
return self.artist_name
class Album(models.Model):
album_no = models.AutoField(primary_key=True)
album_name = models.CharField(max_length=15, default='')
album_artist_no = models.ForeignKey("Artist", related_name="album_artist", on_delete=models.CASCADE, default='')
album_image = models.ImageField(blank = True, null=True)
album_decribe = models.TextField(null=True)
album_music = models.ManyToManyField(Music)
def __str__(self):
return self.album_name
class PlayList(models.Model):
list_no = models.AutoField(primary_key=True)
user_no = models.ForeignKey("users.User", related_name = "playlist_user_no", on_delete=models.CASCADE, null=True)
music_no = models.ForeignKey("Music", related_name = "playlist_music_no", on_delete=models.CASCADE, null=True)
def get_music_no(self):
return self.music_no
def __str__(self):
return f'{self.user_no} playlist'
이를 class들을 요구사항ㄹ을 만족하기 위해서 views.py 에서 구성한 코드는
def index(request):
context = {
}
return render(request, 'index.html', context=context)
def single(request):
album_list = Album.objects.all()
context = {"album_list": album_list }
return render(request, 'single.html', context= context)
def chart(request) : #curr_page : 현재 페이지
music_list = Music.objects.all()
print(music_list)
context = {"music_list" : music_list}
return render(request, "chart.html", context )
def playlist(request):
user_playlist = PlayList.objects.filter(user_no=request.user)
musics = []
for i in user_playlist:
music = i.get_music_no()
musics.append(Music.objects.filter(music_name=music))
return render(request, 'playlist.html',{"play_list" : musics})
def list_add(request, music_no):
user_no = request.user
list_music_no = Music.objects.get(pk = music_no)
my_list = PlayList(user_no = user_no, music_no=list_music_no)
my_list.save()
return redirect("/blog/playlist")
def list_delete(request, music_no):
user_no = request.user
list_music_no = Music.objects.get(pk = music_no)
my_list = PlayList.objects.get(music_no = list_music_no)
my_list.delete()
return redirect("/blog/playlist")
이렇게 현재까지 구성된 프로젝트는
메인 페이지
음원 페이지
앨범 페이지 (앨범 1개만 넣어놓은 상태)
플레이리스트 페이지
로그인 페이지
회원가입 페이지
로 구성되어 있다.