A ship in harbor is safe, but that is not what ships are built for.

개발일지/AI 캠프

내일배움캠프 AI - 59일차 TIL, 2022.11.23

플리피나리 2022. 11. 28. 10:50
반응형

스파르타 코딩클럽 내일배움캠프 AI 웹개발자양성과정 3회차

2022.11.23. 59일차 - TIL

 

 

1. random 모듈

원격강의에서 제공하는 유명 화가 화풍은 총 11개. 화풍을 사용자들이 직접 선택해서 올릴 수도 있겠지만 우리는 다양한 화풍이 랜덤으로 나오는게 재밌겠다고 생각해서 랜덤 모듈을 사용했다.

paints = {
            1: 'composition.t7',
            2: 'la_muse.t7',
            3: 'starry_night.t7',
            4: 'the_wave.t7',
            5: 'candy.t7',
            6: 'feathers.t7',
            7: 'la_muse.t7',
            8: 'mosaic.t7',
            9: 'starry_night.t7',
            10: 'the_scream.t7',
            11: 'udnie.t7',
        }

# 1~11까지 랜덤으로 선택
num = random.randrange(1, 12)

# OpenCV의 dnn 모듈 사용. 선택된 딥러닝 모델 로드하기
net = cv2.dnn.readNetFromTorch(paints[num])

이렇게 코드를 작성하면 업로드한 이미지에 11개 화풍 중 1개가 랜덤하게 적용되어 이미지 처리가 된다.

2. 접근 권한 설정

1) view에 접근 할 수 있는 요청을 drf의 permission_classes를 활용해 관리 할 수 있다.
아래 이외에도 다양한 permission class들이 존재한다.

  • permissions.AllowAny : 모든 사용자를 대상으로 접근 허용
  • permissions.IsAuthenticated : 로그인 된 사용자를 대상으로 접근 허용
  • permissions.AllowAny : 모든 사용자를 대상으로 접근 허용

2) permission class 커스텀하기

  • 가입일이 1주일 이상 된 사용자만 접근 가능하도록 설정
from rest_framework.permissions import BasePermission
from datetime import timedelta
from django.utils import timezone

class RegistedMoreThanAWeekUser(BasePermission):
    message = '가입 후 1주일 이상 지난 사용자만 사용하실 수 있습니다.'
    def has_permission(self, request, view):
        return bool(request.user and request.user.join_date < (timezone.now() - timedelta(days=7)))
  • admin은 모든 권한이 있고, 인증 된 사용자는 조회만 가능하도록 설정
from rest_framework.permissions import BasePermission
from rest_framework.exceptions import APIException
from rest_framework import status

class GenericAPIException(APIException):
    def __init__(self, status_code, detail=None, code=None):
        self.status_code=status_code
        super().__init__(detail=detail, code=code)

class IsAdminOrIsAuthenticatedReadOnly(BasePermission):
    """
    admin 사용자는 모두 가능, 로그인 사용자는 조회만 가능
    """
    SAFE_METHODS = ('GET', )
    message = '접근 권한이 없습니다.'

    def has_permission(self, request, view):
        user = request.user

        if not user.is_authenticated:
            response ={
                    "detail": "서비스를 이용하기 위해 로그인 해주세요.",
                }
            raise GenericAPIException(status_code=status.HTTP_401_UNAUTHORIZED, detail=response)

        if user.is_authenticated and user.is_admin:
            return True
            
        if user.is_authenticated and request.method in self.SAFE_METHODS:
            return True
        
        return False
 

게시글 이미지 업로드 후 변환 이미지 미리보기 변경 안됨

북마크 프론트에 표기 오류

반응형