모든 소스코드는 의미있게 커밋을 해주시고, 완료 후에 본 이슈 댓글로 배포한 서버 주소 및 저장소 링크를 남겨주세요.
본 코딩테스트는 12월 15일 화요일까지 진행합니다. 본 코딩테스트 프로젝트는 각자 저장소 내에 mysite3 폴더를 만들어 진행해주세요. 장고의 기능을 최대한 활용해주세요. 기능에 따라 FBV/CBV를 선택적으로 적용하여 구현해주세요. 모든 링크 처리는 URL Reverse를 써야만 합니다. 인증이 꼭 필요한 페이지에는 login_required 제약을 필히 적용해주세요. 전체 템플릿에 부트스트랩 커스텀 테마를 적용하며, 최대한 그럴듯하게 페이지를 스타일링해주세요. static 파일은 CDN 사용을 하지 마시고, 직접 다운받아서 static 경로를 통해 처리해주세요. 이메일 발송 서비스는 SendGrid를 활용해주세요.
주요 계정 정보는 환경변수를 통해 지정해주세요.
DB에 입력되는 모든 데이터는 의미있는 데이터를 입력해주세요. 모델 별로 최소 10개의 데이터가 입력되어야만 합니다. 모든 템플릿은 부모 레이아웃 템플릿으로부터 상속받아 처리해주세요. 모든 파괴적인 액션 (Create/Update/Delete)에는 모두 messages framework를 활용하여 성공 메세지를 남겨야만 합니다. 특정된 라이브러리는 필히 사용하여야 하며, 그 외 필요한 라이브러리는 최대한 사용하실 수 있습니다. 모든 페이지에서 적절히 select_related 및 prefetch_related를 적용해주세요. 기능별 대표페이지는 페이지 상단 nav-bar에 링크로 제공되어야만 하며, 회원가입/로그인/로그아웃/현재 활성화된 링크는 active 상태로 표현되어야만 합니다. 웹사이트는 모바일 기기에서도 사용이 용이하도록 반응형을 지원해야만 합니다. 모바일 기기에는 확대/축소없이 이용할 수 있어야 하며, 가로 스크롤이 없어야 합니다. 클릭/터치 이벤트를 동일하게 처리해야 합니다.
accounts 앱을 생성
로그인/로그아웃/회원가입/프로필조회/프로필수정 화면을 구현 커스텀 유저 모델을 구현하되, 추가로 휴대폰번호를 입력받습니다. 휴대폰 번호는 프로필에서만 조회/수정가능하며, 휴대폰번호 패턴에 대한 유효성 검사를 수행해야만 합니다. 회원가입 시에 username으로서 이메일 주소를 받고, 이메일 유효성 검사 수행 프로필 모델 (유저 모델과 1:1)
이메일 알림받기 옵션 필드
프로필 화면에는 "좋아요"를 한 포스팅 목록 나열 및 페이징 처리
journal 앱 생성
포스팅
제목, 내용, "0개N개 이상의 사진", "0개N개 이상의 태그", 조회수를 지원하여야만 합니다.
포스팅 입력과 사진 입력은 별도 페이지로 제공되어도 됩니다. 사진 중 1장만 대표사진으로 지정할 수 있습니다.
List/Detail/Create/Update/Delete 구현 포스팅 생성/수정/삭제 시에는 로그인이 필요합니다. 삭제 시에는 유저의 암호를 입력받아 암호가 일치할 때에만 삭제토록 합니다. 각 포스팅의 수정/삭제는 작성자 본인 혹은 관리자만 가능합니다. 수정/삭제 권한이 없는 사람이 해당 주소로 방문 시에는 redirect 응답과 함께 경고 messages를 남겨주세요. 새로운 포스팅이 등록될 때마다 "이메일 알림받기 옵션"을 체크한 모든 유저에게 알림 이메일을 발송합니다. 알림 메일 내용은 render_to_string API를 통해 장고 템플릿 시스템을 활용해주세요. 제목 검색을 지원합니다. 목록에 페이징 구현 목록에서 각 포스팅의 대표사진, 제목, 좋아요수, 작성날짜, 작성자를 노출해주세요. Post Detail 화면에서는 입력된 N개 이상의 사진이 있을 때, 이를 zip 파일로 다운받을 수 있도록 링크를 제공하며 뷰를 통해 zip 다운로드 기능을 제공합니다. Post Detail 화면에서 다수의 사진은 Carousel UI로 표현합니다. Post Detail 페이지에서 다음/이전 포스팅 링크 제공 Post 작성 시에는 컨텐츠 내용에 대해 django-summernote 위젯을 적용합니다. 태그 관리는 django-taggit 라이브러리를 활용해주세요. 포스팅 좋아요 구현. 좋아요 취소 지원. 처리는 Ajax로 처리해서 페이지 전환이 없도록 해주세요. 2가지 정렬 방식을 지원 : 최신순, 좋아요 내림차순
댓글
포스팅 내 댓글 목록 구현 List/Detail 구현 (Ajax 사용 유무 Don't care) Create/Update/Delete는 자바스크립트 Ajax로 처리 각 댓글의 수정/삭제는 작성자 본인 혹은 관리자만 가능합니다. 2단계 댓댓글을 구현 : 하위 댓글이 있을 때에는 부모 댓글은 삭제할 수 없습니다. 삭제 링크를 숨길 뿐만 아니라 삭제 POST 요청을 받더라도 이를 거부토록 구현해주세요. 모든 댓글을 조회할 수 있는 댓글 모아보기 페이지 구현 댓글 새로고침 버튼을 제공합니다. 새로고침 버튼 클릭 시에는 페이지 전체 새로고침없이 댓글만 새로고침이 이뤄져야만 합니다.
태그
태그는 django-taggit 라이브러리를 통해 관리하며, 각 태그는 링크로 제공되며, 각 태그의 포스팅 목록 페이지를 구현합니다. 제목 검색을 지원합니다.
랭킹 페이지
유저가 받은 좋아요 수를 기반으로 랭킹페이지를 구현해주세요. 이때 좋아요수/유저이름 리스트를 Chart로도 표현해주세요.
웹서비스를 원하는 서버에 배포하고, 그 과정을 프로젝트 내 배포.md 파일에 기술해주세요.
DB 엔진은 sqlite3가 아닌 일반적인 RDBMS 서버로 해주세요.