ENCORE CLOUD ARCHITECTURE TIL 2/4

신민창·2021년 2월 5일
0

TIL

목록 보기
6/46

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개만 넣어놓은 상태)


플레이리스트 페이지


로그인 페이지


회원가입 페이지

로 구성되어 있다.

0개의 댓글