Album 및 Photo 2개의 테이블 각각의 콘텐츠 편집 기능을 구현한다. 이전의 Add와 Change 기능 구현과 비슷하지만 Album과 Photo 테이블이 1:N 관계로 연결되어 있는 점을 고려해야 한다. URL 설계 모델 코딩 Album 및 Photo 테이블에 owner 필드를 추가해준다. Album과 User 테이블 간 관계 및 Photo와 ...
각 앱의 DB에 들어 있는 레코드들을 장고에서는 콘텐츠라고 지칭하는데 이를 Admin 사이트에서 관리자만이 콘텐츠를 생성, 변경할 수 있었다. 일반 사용자들도 콘텐츠를 생성 및 변경할 수 있도록 한다. but, 콘텐츠 생성 및 변경하는 권한을 모든 사용자에게 부여해서는 안된다. 콘텐츠에 대한 열람은 모든 사용자가 가능하다. 콘텐츠를 새로 생성하는 것은 ...
웹 개발 시 필수 기능인 인증 기능은 일반적으로 로그인 시 username/password를 인증하는 것 외에도 로그인한 사용자에 대한 권한 부여와 웹 요청에 따른 사용자 식별, 사용자별 세션 할당 및 관리 기능 등 세션 처리 기능까지 포함된다. 테이블 설계 - 장고 기본 기능 사용 장고에서 제공하는 User 테이블을 기본으로 사용한다. User 테이블...
사진들을 앨범으로 그룹화해 관리하고 각 사진에 대한 정보를 등록하고 열람할 수 있는 Photo 앱 개발 사진의 썸네일을 처리하기 위해 새로운 커스텀 필드가 필요하므로, Pillow 라이브러리를 활용해서 커스텀 필드를 작성해야 한다. 설계 테이블 설계 Album 테이블 Photo 테이블 하나의 앨범은 여러 개의 사진을 가질 수 있고, 하나의 사진은 하...
검색 기능도 블로그 앱에서 자주 쓰는 기능이므로 오픈 소스로 제공하는 패키지가 많다. 구글 검색 기능을 제공해주는 패키지도 있고, AJAX 기능으로 검색해주는 패키지도 있다. 블로그 앱 내에서의 검색 기능 정도는 장고 자체의 Q-객체(테이블에 대한 복잡한 쿼리를 처리하기 위한 객체)를 이용하면 간단히 구현할 수 있다. 검색 기능을 위해 검색 단어를 입력...
유연하고 확장성 높은 오픈소스 플랫폼 Disqus 앱(DISQUS에서 제공하는 자바스크립트 코드)를 사용한다. DISQUS 플랫폼을 사용하기 위해서는 DISQUS 홈페이지에서 댓글을 사용할 우리 프로젝트에 대해 필요한 사항을 설정해줘야 한다. disqus 앱은 DISQUS 플랫폼과의 연동을 통해 즉, DISQUS 사이트에서 제공하는 웹 서비스를 통해 댓...
각 포스트마다 태그를 달 수 있는 기능으로 태그를 달고 태그별로 포스트의 리스트를 보여주며 태그 클라우드를 만든다. 태그 기능을 제공하는 많은 오픈소스 중에 django-taggit 패키지를 이용할 것이고, 탬플릿 태그 및 태그 클라우드 기능이 추가된 django-taggit-templatetag2 패키지도 같이 사용할 것이다. 설계 UI 기존 포스트 상...
GNB(Global Navigation Bar) 메인 메뉴와 본문, 바닥글로 이루어져 있다. URLconf 첫 페이지 설계이므로 URLconf에서 루트 URL 처리 로직만 설계하면 된다. View HomeView 코딩 애플리케이션이 아닌 프로젝트와 관련된 뷰이므로 BookMarkApp/views.py을 새로 만들어 코딩한다. Templates 프로...
글 등록/열람 태그 기능 댓글 기능 검색 기능 콘텐츠 생성 및 편집 UI 설계 테이블 설계 URL 설계 코딩 순서 뼈대 만들기 - 이미 bookmarkapp에서 했으므로 패쓰 startproejct setting.py 설정 migrate createsuperuser
Bookmark 앱은 자주 방문하는 사이트를 등록해 두었다가 나중에 그 사이트에 재방문할 때 쉽게 찾아갈 수 있게 해주는 앱이다. UI 설계 테이블 설계 Model 'TITLE', 'URL'은 별칭으로 Admin 사이트에서 이 문구가 사용된다. \str\() 함수는 객체(테이블에 들어 있는 레코드 하나)를 문자열로 표현할 때 사용하는 함수로 꼭 정의...
게시글 작성 시 프로젝트를 고를 때 프로젝트 명이 아닌 Project Object (1) 형식으로 나오는 문제 projectapp/models.py에서 \str\ 함수로 프로젝트의 pk : 프로젝트 title을 출력해준다. projectapp의 DetailView에서 로그인을 안했을 경우 subscription이 정의되지 않았는데 return에서 sub...
WYSIWYG? What You See Is What You Get의 약자인 WYSIWYG는 보는대로 글이 써진다는 뜻으로 좀 더 글을 쓸 때 풍부함을 더해주는 기능이다. Medium Editor github: https://github.com/yabwe/medium-editor 사용법 forms에서 사용할 editable 클래스를 위해 create....
RedirectView 구독 버튼을 누르면 그 페이지에서 다른 페이지로 넘어가는 게 아닌 구독 버튼만 바뀐다. 별 다른 정보를 넘겨주지도 않는다. 요청을 받자마자 처리할 것들을 하고 바로 Redirect하도록 한다. startapp subscribeapp LeeBook의 settings.py, urls.py 추가 subscribeapp urls.p...
Projectapp은 Article을 카테고리별로 묶어주는 기능이다. Create / Detail/ List View Success_url to related Project Login_required to CreateView Model : title/ description/ image/ created_at 1. python manage.py starta...
모든 작업을 완료한 후 사이트를 구동시켜보니 특정 사이트들에서 500 에러가 발생했다. 어디서 에러가 발생했는 지 알기 위해 log 기록들을 확인했다. django.db.utils.OperationalError: unable to open database file 에러가 발생하고 있었다. db 파트에서 에러가 나고 있던 것인데 sqlite의 파일 경로...
클라우드 서비스란? 인터넷에 있는 서버를 빌려서 사용하는 것으로 필요한 만큼 서버 자원을 빌려 쓰고 쓴 만큼 비용을 지불하는 방식이다. > 클라우드 서비스를 제공해주는 사이트는 AWS, Digital Ocean, Heroku, PythonAnywhere 등 상당히 많은데 여기선 PythonAnywhere을 사용해본다. 그러나 상용 서비스 운영 예정이라면 ...
개발한 것을 실제로 서비스하기 위해선 개발한 프로그램을 운영 환경에 배포하고 실행해야 한다. 개발 환경에서 운영 환경으로 옮겨가기 위해선 개발 시 지정했던 설정 사항을 변경해줘야 하고 운영 환경의 웹 서버에서도 만든 애플리케이션을 인식할 수 있도록 설정 사항 변경이 필요하다. 장고의 wsgi.py 파일 startproject 명령어를 통해 프로젝트의 뼈대...
URLconf 코딩 voting/urls.py 파일 수정 View 코딩 함수형 뷰 -> 클래스형 뷰 voting/views.py 파일 수정 Template 코딩 상속 기능 추가하기 base.html을 이미 코딩했기 때문에 이를 상속 받는 basevoting.html 템플릿 파일을 만들고 기존 각 템플릿 파일에서 basevoting.html 템플릿을...
각 애플리케이션의 첫 페이지들은 만들었지만 프로젝트의 첫 페이지인 루트(/) URL에 대한 처리 로직은 아직 개발하지 못한 상태 프로젝트 첫 페이지 네비게이션 항목 중 [Project_Home] 항목을 클릭했을 때 에러가 발생한 이유가 프로젝트 첫 페이지인 루트(/) URL에 대한 처리 로직이 없기 때문이다. 로직 설계 UI 설계 URLconf 코딩...