전체 글(47)
-
[Flask] 3-6 회원가입
이번에는 회원가입 기능을 구현해 보자 회원가입 기능은 웹 사이트에서 핵심이다 회원 모델 지금까지는 질문, 답변 모델만 사용했다면 이제 회원 정보를 위한 모델이 필요하다 회원 정보 모델에는 최소한 아래와 같은 속성이 필요하다 속성 설명 username 사용자 이름(ID) password 비밀번호 email 이메일 pybo/models.py 파일을 열어 앞에서 정의한 속성을 바탕으로 User 모델을 작성하자 id는 자동으로 증가하는 User 모델의 기본 키이다 username, password, email에는 null값을 허용하지 않도록 nullable=False로 설정했다 username, email에는 unique=True를 지정했다 unique=True는 "같은 값을 저장할 수 없다"를 뜻한다 이렇게 ..
2023.12.02 -
[Flask] 3-5 질문에 달린 답변 개수 표시하기
질문 목록에서 "해당 질문에 달린 답변 개수"를 표시해 보자 코드의 양은 많지 않지만 "게시판 서비스를 더욱 서비스답게 만들어 주는 기능"이다 답변 개수는 아래처럼 게시물 제목 바로 오른쪽에 표시하자 {% if question.answer_set|length > 0 %}로 답변이 있는 경우를 검사하고 {{ question.answer_set|length }}로 답변 개수를 표시했다 이제 질문 목록 페이지로 이동하면 답변이 있는 질문은 제목 오른쪽에 빨간색 숫자가 표시될 것이다 정상적으로 동작 확인
2023.12.02 -
[Flask] 3-4 게시물에 일련번호 추가하기
게시물 번호 문제 계속해서 서비스를 개선해 보자 현재 질문 목록 화면을 유심히 보면 페이지마다 게시물 번호가 항상 1부터 시작되는 문제가 있다 페이지를 이동해 봐도 게시물 번호는 1부터 시작한다 두번째 페이지로 이동하더라도 여전히 게시물 번호가 1부터 시작된다 이 문제를 해결해 보자!! 게시물 번호 공식 만들기 만약 질문 게시물이 12개라면 1페이지에는 12번째~3번째 게시물이, 2페이지에는 2번째~1번째 게시물이 역순으로 표시되어야 한다 질문 게시물의 번호를 역순으로 정렬하려면 아래와 같은 공식을 적용해야 한다 항목 설명 번호 최종 표시될 게시물 번호 전체 게시물 개수 데이터베이스에 저장된 게시물 전체 개수 현재 페이지 페이징에서 현재 선택한 페이지 페이지당 게시물 개수 한 페이지당 보여줄 게시물의 개..
2023.12.02 -
[Flask] 3-3 템플릿 필터 직접 만들어 보기
이번에는 템플릿 필터를 직접 만드는 방법에 대해서 알아보자 템플릿 필터는 이미 전체 답변 개수를 구할 때 해보았다 {{ question.answer_set|length }}와 같이 템플릿에서 사용한 객체에 파이프라인 문자 |를 붙여 필터 기능을 한다 ( {{ question.answer_set|length }}의 length는 전체 답변 개수를 구할 때 사용한 템플릿 필터이다) 질문 목록 화면의 작성일시를 보자 작성일시의 날짜값은 datetime 객체이다 현재 질문 목록 템플릿에서는 datetime 객체를 문자열로 표시했으므로 2023-12-02 16:56:38.933828과 같은 값으로 표시된다 대부분의 게시판 서비스에서는 시간을 이런 식으로 표시하지 않는다 템플릿 필터를 사용하면 이런 출력 문자열을 ..
2023.12.02 -
[Flask] 3-2 게시판 페이징
지금까지 만든 파이보의 질문 목록은 페이징(paging) 기능이 없었다 만약 페이징 기능이 없으면 게시물이 300개 작성되면 질문 목록 화면에 게시물이 300개 그대로 표시될 것이다 이런 경우 한 화면에 표시할 게시물이 많아져서 스크롤 바를 내려야 하는 등의 불편함이 생기므로 페이징 기능은 필수다 임시 질문 데이터 300개 생성하기 페이징을 구현하기 전에 페이징을 테스트할 정도로 데이터를 충분히 생성하자 여기서는 테스트 데이터를 300개 생성한다 테스트 데이터를 대량으로 만드는 가장 좋은 방법은 플라스크 셸을 이용하는 것이다 질문 데이터를 생성하기 위한 모듈을 import 하고 for 문을 이용하여 다음처럼 테스트 데이터를 300개 생성하자 이제 플라스크 셸을 종료하고 로컬 서버를 실행한 다음 브라우저에..
2023.12.02 -
[Flask] 3-1 내비게이션바
지금까지 만든 파이보의 기능(질문 등록·조회, 답변 등록·조회)을 사용해 봤다면 편의 기능이 없어서 불편함을 느꼈을 것이다 여기서는 이런 불편함을 해소하기 위해 내비게이션 바를 만들어 볼 것이다 내비게이션 바 추가하기 내비게이션 바는 모든 페이지에서 보여야 하므로 base.html 템플릿 파일을 열어 태그 바로 아래에 추가하자 내비게이션 바에는 메인 페이지로 이동해 주는 "Pybo" 로고(클래스값 navbar-brand)를 가장 왼쪽에 배치하고, 오른쪽에는 "계정생성"과 "로그인" 링크를 추가하자 질문 목록 화면에서 상단 내비게이션 바 확인하기 이제 질문 목록 페이지를 요청하면 맨 위에 멋진 내비게이션 바가 보일 것이다 또한 내비게이션 바의 "Pybo" 로고를 누르면 메인 페이지로 돌아갈 수 있다 "Py..
2023.12.02