3. DB에 중복저장되지 않게 변경

get_or_create()

  • get_or_create()에 전달 된 키워드 인수는 get() 호출에 사용한다.
    • 이 때, 선택인자 default를 제외하고 호출한다.
  • 객체가 발견되면, get_or_create()는 해당 객체의 튜플을 반환하고 False를 반환한다.
  • 객체가 발견되지 않으면, get_or_create()는 새 객체를 인스턴스화하고 저장하여 새 객체의 튜플과 True를 반환한다.
defaults = {
    'title': title,
    'description': description,
    'published_date': published_date
}
# youtube_id로 검색해 없으면,
# defaults를 포함해 데이터베이스에 저장
Video.objects.get_or_create(
    youtube_id=youtube_id,
    defaults=defaults
)

4. AbstractUser를 상속받아 CutomUser 구현

  1. member app 생성
  2. AbstracUser를 상속받아 MyUser 생성
  3. AUTH_USER_MODE에 등록
  4. 마이그레이션 해본다

AbstractUser

5. search view의 동작 변경

  1. keyword로 전달받은 검색어를 이용한 결과를 데이터베이스에 저장하는 부분삭제
  2. 결과를 적절히 가공하거나 그대로 템플릿으로 전달
  3. 템플릿에서는 해댱 결과를 데이터베이스를 거치지 않고 바로 출력

6. POST 요청받는 것을 GET 요청받아 처리하도록 변경

  • .get() : 딕셔너리 메서드
  • dict.get(key, default=None) 주어진 key의 value를 리턴
  • 만약 key가 유효하지 않다면, default 값으로 None을 리턴
# Null과 공백여러개가 입려되었을 경우를 처리하기 위해, get 메서드를 사용한다.
keyword = request.GET.get('keyword', '').strip()
    if keyword != '':

7. 이전, 다음 페이지 기능

  1. Youtube serach API에 요청을 보낸 후, 결과에
    1. nextpageToekn만 올 경우에는 첫 번째 페이지
    2. 둘다 올 경우에는 중간 어딘가
    3. prevpageToeken만 올 경우 마지막 페이지
  2. 템플릿에 nextPageToken, prevPageToken을 전달해서 해당 toekn(next 또는 prev)값이 있을 경우에 따라 각각 ‘다음’ 또는 ‘이전’ 버튼을 만들어준다. (pageToken은 1,2,3페이지로 표현은 안되고 이전/뒤로만 가능)

8. CSS Refresh

캐시때문에 CSS 파일 적용이 잘 안되는데, 이럴 때 파일 이름 뒤에 ?ver1과 같이 붙여주면된다. 하지만 매번 숫자를 변경하기 번거로으므로 시간의 초를 가져오면 된다.

과제

  1. 북마크 기능을 만든다.
    1. 검색결과의 각 아이템에 ‘북마크하기’버튼을 만들어서 누르면 DB에 저장
  2. 북마크 목록 보기 페이지를 만든다
    1. 북마크한 영상 목록을 볼 수 있는 페이지 구현
    2. 중간자 모델을 사용해서 북마크를 추가한 시간 (created_date)을 기록한다.

(extra)

  1. 사용자 별로 북마크를 구분할 수 있도록한다.
  2. 검색 결과에서 이미 북마크를 누른 영상은 ‘북마크 되어있음’ 또는 ‘해제’ 버튼이 나타나도록 한다.
  3. 북마크 목록에서 해당 아이템을 클릭 할 경우 유투브 페이지로 이동하지 않고, 자체 video_detail 페이지를 구현해서 보여주도록 한다.
  4. CSS 반응형 모바일 만들어보기
  5. 로그인/회원가입 만들기