TIL | 9/1 | 코드컨벤션과...dockerfile 실행

Yeseul Han·2022년 9월 1일
0

🌞 시작하는 글


원티드 프로젝트가 드디어 시작되었다!!!!!
플젝하는건 역시 재밌음...
미묘하게 내가 진행을 많이 못하는것 같은 느낌을...정말 오랜만에 받는다..ㅎㅎ 담 프로젝트에 더 열심히 하면 되겠지..ㅋㅋㅋ

💻 훈련 내용

1. docker

doker로 로컬 서버에서 돌려봤다.
가장 간단한 버전의 코드라고 생각한다.
/django라는 워킹디렉토리를 만들어서 requirements.txt를 복사하고 requirements를 실행한다.

FROM python:3.9.13-alpine3.15
ENV PYTHONUNBUFFERED=1
ENV PYTHONDONTWRITEBYTECODE=1
WORKDIR /django
COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt

터미널 명령어 python-djano란 이름으로 dockerfile 실행

docker build --tag python-django .
docker run --publish 8000:8000 python-django

2.docker-compose.yml

1) app을 다룰 컨테이너를 만들고
2) 여기 디렉토리에 있는 것을 build한다.
3) volume (컨테이너에 해당하는 폴더라고 이해했다)를 만든다.
4) 포트는 8000포트
5) image는 django라는 태그가 붙은 app이라는 이름의 이미지
6) 컨테이너명은 django-container로 지정해줬다.
7) 지금은 로컬로 실행되고 있기에 런서버를 커맨드로 실행해줬다.

version: '3.9'
services:
  app:
    build: .
    volumes:
      - .:/django
    ports:
      - 8000:8000
    image: app:django
    container_name: django_container
    command: python manage.py runserver 0.0.0.0:8000

도커 컴포즈 빌드 및 실행

docker-compose build
docker-compose up

post_service.py & 수정

post_service.py에 if 문을 추가해 유저 사용 조건을 명시했는데, 오늘 테스트 결과 제대로 작동하지 않았다. 문제는 service 코드를 통과 했을때, 안했을 때 상관없이 views.py return 문을 통과했기 때문. 모든 service 함수에 리턴 값을 지정하고, 리턴 값이 있을 때만 views.py 성공 return 값을 타게 만들었다. 그 외 docstring 등 수정도 조금 했다.

def get_post(post_type:int, user_type:int) -> PostSerializer:
    """
    모든게시판의 Read를 담당하는 Service
    Args :
        "post_type" : posts.PostType 외래키 (urls에서 받아옴 1=공지, 2=운영, 3=자유)
    Return :
        성공시: PostSerializer
        실패시: {"detail": "Error message"}
    """

    if (post_type==ADMIN and is_manager(user_type)) or post_type in [NOTICE,GENERAL]:
        get_posts = PostModel.objects.filter(post_type=post_type)
        get_posts_serializer = PostSerializer(get_posts, many=True).data
        return get_posts_serializer or {"detail": "게시글이 없습니다"}


def create_post(create_post_data:dict[str|str], post_type : int, user_type:int) -> bool:
    """
    Post의 Create를 담당하는 Service
    Args :
        create_post_data ={
            "user" (User): user.User 외래키,
            "title" (str): 게시글의 제목,
            "content" (str) : 게시글의 내용
        }
    Return :
        bool
    """
    if is_manager(user_type) or (post_type==GENERAL and is_general(user_type)):
        create_post_data["post_type"] = post_type
        post_serializer = PostSerializer(data = create_post_data)
        post_serializer.is_valid(raise_exception=True)
        post_serializer.save()
        return True
    return False

def update_post(post_id : int, update_post_data: dict[str|str], user_type:int)-> PostSerializer:
    """
    모든게시판의 Update를 담당하는 Service
    Args :
        "post_id" (int): posts.Post 외래키, url에 담아서 보내줌,
        update_post_data = {
            "title" (str): 게시글의 제목 or
            "content" (str) : 게시글의 내용
        }
    Return :
        PostSerializer
    """

    update_post = PostModel.objects.get(id=post_id)
    post_type=update_post.post_type
    if is_manager(user_type) or (post_type==GENERAL and is_general(user_type)):
        update_post_serializer = PostSerializer(update_post, update_post_data, partial=True)
        update_post_serializer.is_valid(raise_exception=True)
        update_post_serializer.save()
        return update_post_serializer.data

def delete_post(post_id : int, user:UserModel)-> bool:
    """
    모든게시판의 Delete를 담당하는 Service
    Args :
        "post_id" (int): posts.Post 외래키, url에 담아서 보내줌
    Return :
        bool
    """
    user_type = user.user_type_id
    delete_post = PostModel.objects.get(id=post_id)
    if user_type==1 or (user_type==2 and delete_post.user==user):
        delete_post.delete()
        return True
    return False

🎯 오늘의 목표

⭕ Did

💕 What I learned

❌ 기타오류/ 궁금증 해결

profile
코딩 잘하고 싶다

0개의 댓글