Python 기초 20 - 게시판 만들기

do yeon kim·2022년 6월 2일
0

Python(기초)_fastcampus

목록 보기
20/21

게시판 만들기

게시판에 게시글을 추가하고, 읽고, 삭제, 수정하는 프로그램을 구현해보자
읽고, 글을쓰는 것은 가능했지만 수정과 삭제는 구현실패
좀더 공부 후 코드 추가

클래스 만들기

import os
import csv

class Post :
    post_num = 0	#클래스 변수로 게시물이 하나 추가될때 마다 1씩 올라간다.
    def __init__(self, title, content):
        self.title = title
        self.content = content
        Post.post_num += 1
    
    def make_post(self): ##csv파일에 추가하기 위해서 ,로 형식을 만드는 코드
        return Post.post_num, self.title, self.content

    def get_title(self):
        return self.title
    
    def get_content(self):
        return self.content

데이터 가지고 오기

#데이터를 가지고 올때 담을 변수
data=[]


# 파일이 존재하지 않을 경우 만들고 종료
if  not os.path.exists("data.csv"): 
    file =open("data.csv", "w",newline="", encoding= "UTF-8-sig")
    file.close()

# 파일이 존재하는 경우 파일을 연다.
if os.path.exists("data.csv"):
    file = open("data.csv", "r", encoding= "UTF-8-sig")
    
    #파일에 데이터가 있으면 데이터를 가지고 와서 먼저 객체를 만들어준다.
    if os.path.getsize("data.csv") > 0:
        reader = csv.reader(file)
        for i in reader:
            post = Post(i[0],i[1])
            new_post = post.make_post()
            data.append(new_post) #객체를 만들고 그 객체를 data[]에 담는다.
    
    #파일레 데이터가 없으면 그대로 pass
    else:
        pass
    
    file.close()

데이터 추가하기

#타이틀과 컨텐트 입력받아서 새로운 객체로 만들고 그 객체를 data[]에 저장
#파일에 저장된 데이터를 덮어쓰기
def add_post():
    title = input("title 입력하세요>>>")
    print() 
    content = input("content 입력하세요>>>")
    print()
    post = Post(title, content)
    new_post = post.make_post()
    data.append(new_post)
    
    file =open("data.csv", "a",newline="", encoding= "UTF-8-sig")
    writer = csv.writer(file)
    writer.writerow(data[-1]) #맨 마지막 데이텀나 추가


#구현실패
#공부 후 다시 구현
def update_post(target):
    pass
      
def del_post():
    pass

데이터 상세보기

def show_detail(number):
    file =open("data.csv", "r", encoding= "UTF-8-sig")
    reader = csv.reader(file)

    for i in reader:
        if number == i[0]:
            print()
            print(f" {i[0]}번 글 상세보기")
            print(f" title   :  {i[1]}")
            print(f" content :  {i[2]}")
            print()
            break
    file.close()
    
    
    while True:
        print("1.수정하기 2.삭제하기 3.돌아가기(-1을 입력하세요)")
        choice = int(input("입력하세요>>>>>"))
        if choice == 1:
            update_post(data[int(number)-1])
        elif choice ==2 :
            del_post()    
        elif choice == -1:
            break

데이터 보기

#데이터를 읽기 모드로 열어서 모든 데이터를 돌아가면서 출력
def show_post():
    file =open("data.csv", "r", encoding= "UTF-8-sig")
    reader = csv.reader(file)

    for index, data in enumerate(reader, start=1):
        print()
        print(f"{index} 번째 글입니다.")
        print(f"number  :  {data[0]}")
        print(f"title   :  {data[1]}")
        print()

    #글 상세 페이지로 이동하기위한 코드
    while True:
        print("1.상세보기(글번호를 입력하세요), 2.뒤로돌아가기(-1 을입력하세요)")
        
        choice = int(input(">>>"))
        
        if choice == -1:
            break
        elif choice in range(1, Post.post_num+1):
            show_detail(str(choice))
            break        
    file.close()    

실행구문

while True:
    print(" 게시물 메뉴 ")
    print("1. 게시물 보기 ")
    print("2. 게시물 쓰기 ")
    print("3. 프로그램종료 ")
    print()
    

    try:
        mode_choice = int(input("입력하세요>>>>"))
        print()
        if mode_choice not in (1,2,3):
            raise ValueError()

        else:    
            if mode_choice == 1:
                print(">>>>>게시물 보기<<<<<")
                print()
                print()
                show_post()                        

            elif mode_choice == 2:
                print(">>>>>게시물 쓰기<<<<<")
                print()
                add_post()
    
            elif mode_choice ==3:
                print(">>>>>프로그램 종료<<<<<")
                print()
                break
    except ValueError:
            print("다시 입력하세요")
            print()





https://fastcampus.co.kr/dev_online_pyweb

0개의 댓글