IT/프로그래밍

[파이썬] 파이썬 1차 프로젝트 블로그 만들기 3번째 [패스트 캠퍼스 챌린지 19일차]

뜻밖의 행복 2022. 2. 11. 22:31
반응형

안녕하세요? 뜻밖의 행운입니다.

 

패스트캠퍼스 챌린지 19일차 

지난번에 이어 계속해서 블로그를 개발하고 있습니다. 

이대로 만들어서 서비스 런칭 시키고 

부자가 되겠습니다. 가즈아!

어제 구현한 것은

import os
import csv
from post import Post

# 파일 경로
file_path = "./myvenv/data.csv"

# post 객체를 저장할 리스트
post_list = []

# data.csv 파일이 있다면
if os.path.exists(file_path):
    # 게시글 로딩
    print("게시글 로딩중...")
    f = open(file_path, "r", encoding="utf8")
    reader = csv.reader(f)
    for data in reader:
        # Post 인스턴스 생성하기
        post = Post(int(data[0]), data[1], data[2], int(data[3]))
        post_list.append(post)
else:
    # 파일 생성하기
    f = open(file_path, "w", encoding="utf8", newline="")
    f.close()

data.csv 파일 있냐 없냐에 따라 파일 생성하느냐 마느냐를 결정하는 것을 구현했습니다.

오늘은 Blog 메뉴와 글씨기 기능을 만드는 날입니다.

 

최종 완성은 아래와 같습니다.

 

import os
import csv
from post import Post

# 파일 경로
file_path = "./myvenv/data.csv"

# post 객체를 저장할 리스트
post_list = []

# data.csv 파일이 있다면
if os.path.exists(file_path):
    # 게시글 로딩
    print("게시글 로딩중...")
    f = open(file_path, "r", encoding="utf8")
    reader = csv.reader(f)
    for data in reader:
        # Post 인스턴스 생성하기
        post = Post(int(data[0]), data[1], data[2], int(data[3]))
        post_list.append(post)
else:
    # 파일 생성하기
    f = open(file_path, "w", encoding="utf8", newline="")
    f.close()

# 게시글 쓰기
def write_post():
    print("\n\n- 게시글 쓰기 -")
    title = input("제목을 입력해 주세요\n>>>")
    content = input("내용을 입력해 주세요\n>>>")
    # 글번호 
    id = post_list[-1].get_id() + 1
    post = Post(id, title, content, 0)
    post_list.append(post)
    print("# 게시글이 등록되었습니다.")

# 메뉴 출력하기
while True:
    print("\n\n- FASTCAMPUS BLOG -")
    print("- 메뉴를 선택해 주세요 -")
    print("1. 게시글 쓰기")
    print("2. 게시글 목록")
    print("3. 프로그램 종료")
    try:
        choice = int(input(">>>"))
    except ValueError:
        print("숫자를 입력해 주세요")
    else:
        if choice == 1:
            write_post()
        elif choice == 2:
            list_post()
        elif choice == 3:
            save()
            break

네 게시글 쓰기와 메뉴 출력하기가 구현된 모습입니다.

실제로 실행을 시켜 보면

 

이렇게 메뉴를 고르라고 뜹니다. 

 

글 쓰기까지 작동을 하는 것이 보입니다.

그렇다면 각 항목을 왜 그렇게 구현했는지 보면

while True: < 메인 메뉴가 계속 보여야하기 때문에 while 로 반복을 합니다.

    print("\n\n- FASTCAMPUS BLOG -") < print의 경우 그냥 메뉴 화면을 출력하는 것이니 어려운 부분이 없네요
    print("- 메뉴를 선택해 주세요 -")
    print("1. 게시글 쓰기")
    print("2. 게시글 목록")
    print("3. 프로그램 종료")
    try:    < try - except 구문 네 예외처리를 위함입니다. 아래 choice에서 사용자가 숫자가 아닌것을 입력했을때를 대비
        choice = int(input(">>>"))
    except ValueError: < error 발생시 해당 error를 직접 지정 가능한데 1~3이 아닌 다른것을 입력했을 때 
        print("숫자를 입력해 주세요") 발생하는 Value Error를 처리합니다. 
    else:
        if choice == 1: < 각 메뉴를 선택했을 때 어떤 기능을 실행시킬지 정하는 부분입니다. 
            write_post()   < 오늘은 글쓰기 이니까 write_post() 함수를 만들면 되겠습니다.
        elif choice == 2:
            list_post()
        elif choice == 3:
            save()
            break

 

그리고 바로 게시글 쓰기 함수 개발을 하겠습니다.
 
def write_post(): < def로 정의 합니다.
    print("\n\n- 게시글 쓰기 -"
    title = input("제목을 입력해 주세요\n>>>"< title 변수에는 제목을 입력후 저장하고 
    content = input("내용을 입력해 주세요\n>>>") < content 변수에는 내용을 입력후 저장
    # 글번호  < post 속성에 id 글번호가 있었는데 글번호는 고유해야 합니다.
    id = post_list[-1].get_id() + < 이런식으로 응용하는 것을 익혀야 하는데 쉽지 않지요
    리스트에서 인덱스 -1은 가장 마지막 자료 입니다. 그 마지막 자료에서 get_id() 매서드를 통해
    id를 받으면 + 1을 해서 id 값을 증가 시키면 됩니다.
    post = Post(id, title, content, 0) < Post 클래스에 맞게 데이터를 넣으면 되겠지요? 처음 생성하는 거니까
    조회수는 0 입니다.
    post_list.append(post) < post 리스트에 새로 작성한 글을 추가 하면 끝!
    print("# 게시글이 등록되었습니다.")

간단한데 꽤 핵심적인 기능들이 이렇게 구현이 되니 너무 신기하네요 ㅎㅎ

이제 조금 재미가 붙기 시작합니다.

 

 

반응형