22. 11. 23.

hyo_d·2022년 11월 23일
0

캠프 59일차

유화제작 프로젝트 2일차. 딥러닝 원격강의에 코드가 대부분 나와있어서 어렵지 않을거라고 예상했는데, 결과 이미지를 어떻게 출력할지 생각보다 고민도 많이 되고 어려운 부분이 많아서 진행이 잘 안됐다😥 그래도 어찌저찌 이것저것 시도해서 코드는 작성을 했고, 내일부터 프론트와 연동하면서 수정해야 할 것 같다.

오늘 공부한 것

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
profile
햇병아리

0개의 댓글