Home > PROJECT PRACTICE > Python > 1. blog

1. blog
python

블로그를 만든 기념으로 파이썬을 이용해서 블로그가 운영되는 형식에 맞춰서 파이썬 사용법을 연습해봄

main.py #


from module.Blog import Blog
from module.Post import Post

MAIN_TEXT = '''
-----------------
1. 블로그 글 작성
2. 블로그 글 리스트
3. 종료
-----------------
'''
MAIN1_TEXT = [
"타이틀: ",
"내용: "
]
MAIN2_TEXT = '''
-----------------
1. 블로그 보기
2. 블로그 편집
3. 뒤로 돌아가기
-----------------
'''
MAIN2_DETAIL_TEXT = 'id를 입력해주세요: '
MAIN1_END_TEXT = '''
작성 완료했습니다.
------------------
'''

class Main:
    def __init__(self, blog_data) -> None:
        self.blog_data = blog_data
        pass
    def __call__(self):
        while True:
            try:
                handler = Handler()
                post = Post()
                blog = Blog()
                (menu_num, input_data) = handler.get_input(text = MAIN_TEXT)
                input_data = int(input_data)
                if menu_num == "main":
                    if input_data == 1:
                        (menu_num, input_datas) = handler.get_input(text = MAIN1_TEXT)
                        self.blog_data = post.create(data= self.blog_data, title= input_datas[0], content= input_datas[1])
                        print(MAIN1_END_TEXT)
                    elif input_data == 2:
                        (menu_num, input_data) = handler.get_input(text = MAIN2_TEXT)
                        blog.view_all(data= self.blog_data, state="title")
                        input_data = int(input_data)
                        
                    elif input_data == 3:
                        break
                    else:
                        print("다시 선택해주세요.")
                if menu_num == "main2":
                    if input_data == 1:
                        (menu_num, input_data) = handler.get_input(text = MAIN2_DETAIL_TEXT)
                    elif input_data == 2:
                        pass
                    elif input_data == 3:
                        pass
                    else:
                        print("다시 선택해주세요.")
                if menu_num == "main2_1":
                    blog.view_all(data= self.blog_data, state="full", id=int(input_data))
                    (menu_num, input_data) = handler.get_input(text = "")
            except ValueError:
                print("숫자를 입력해주세요.")

class BlogDataSetting:
    def __init__(self) -> None:
        self.max_id = self.__get_default_id()
        self.posts = self.__get_posts()
        pass

    def __get_default_id(self):
        return 0

    def __get_posts(self):
        return []

class Handler:
    def get_input(self, text):
        if (text == MAIN_TEXT):
            print(text)
            return ("main", input())
        elif (text == MAIN1_TEXT):
            input_list = []
            for txt in text:
                input_list.append(input(txt))
            return ("main1", input_list)
        elif (text == MAIN2_TEXT):
            print(text)
            return ("main2", input())
        elif (text == MAIN2_DETAIL_TEXT):
            return ("main2_1", input(text))
        else:
            return ("main", input("돌아가기"))

if __name__ == "__main__":
    blog_data = BlogDataSetting()
    main = Main(blog_data)
    main()

module/Blog.py #


class Blog():
    """
    전체 리스트 보기(id 기준), 태그 리스트 보기
    """
    def __init__(self) -> None:
        super().__init__()
        pass

    def view_all(self, data, state="title", id=False):
        posts = data.posts
        print("-------------")
        for post in posts:
            if id:
                if id == post['id']:
                    print(f"id: {post['id']}")
                    print(f"타이틀: {post['title']}")
                    if state == "full":
                        post['view_count'] += 1
                        print(f"내용: {post['content']}")
                        print(f"view: {post['view_count']}")
                        print(f"like: {post['like']}")
                    print(f"\t")
            else:
                print(f"id: {post['id']}")
                print(f"타이틀: {post['title']}")
                if state == "full":
                    print(f"내용: {post['content']}")
                    print(f"view: {post['view_count']}")
                    print(f"like: {post['like']}")
                print(f"\t")
        print("-------------")

module/Post.py #


class Post():

    def __init__(self) -> None:
        super().__init__()
        pass

    def create(self, data, title, content):
        data.max_id += 1
        data.posts.append({
            "id": data.max_id,
            "title": title,
            "content": content,
            "view_count": 0,
            "like": 0
        })
        return data 

    def edit():
        pass