오늘도 아침에 스터디 (알고리즘,cs)를 공부하고, django특강, 그리고 팀원들끼리 타임어택을 진행한 후에
개인적인 복습과, 과제를 진행 하였다.
요즘 늦게까지 작업을 하는 경우가 많은데, 그러다 보니 운동 할 시간이 부족해서 저녁을 간단하게 먹고 30분정도 운동을 하고
샤워를 간단히 한후 작업을 하니 뭔가 집중도 잘되고 정신도 맑고, 기분도 좋다.
class ArticleSerializers(serializers.ModelSerializer):
article = serializers.SerializerMethodField()
def get_article(self, obj):
time_table= ArticleModel.objects.filter(end_time__gte=timezone.now())
if time_table:
time_table.order_by('-start_time')
print(time_table)
return [{"user":article.user.email,"title":article.title,"start_time":article.start_time,"end_time":article.end_time,"desc":article.desc} for article in obj.article_set.all()]
class Meta:
model = ArticleModel()
fields = ["article"]
장고의 꽃이라 불릴만 한 기능이다. obj 를 받아와서 다양하게 이용 할 수 도 있고, MethodField를 통해서 자유롭게 필드를
만들 수 있다. 이제 가장 큰 장점이라고 생각한다. 이걸로 인해서 다른 serialziers 에 상속하고, 상속 받고 해서 한번에 여러개의 데이터도 보내줄 수 있고 활용 방법이 정말 많은 것 같다. 처음엔 이해하기 어려웠지만, 타임어택과 개속된 복습을 통해서 이제는 어느정도 익숙해진 것 같다
또한 print(dir()) 이 매우 유용하다!
class RegistedMoreThanAWeekUser(BasePermission):
"""
가입일 기준 1주일 이상 지난 사용자만 접근 가능
"""
message = '가입 후 1주일 이상 지난 사용자만 사용하실 수 있습니다.'
def has_permission(self, request, view):
return bool(request.user and request.user.join_date < (timezone.now() - timedelta(days=7)))
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
elif user.is_authenticated and request.method in self.SAFE_METHODS:
return True
return False
permission 을 부여하는 코드이다. 상단에 따로 permissions.py 를 만들어서 views 에 임포트 해주면 된다.
permission_classes = [IsAdminOrIsAuthenticatedReadOnly]
퍼미션은 커스텀이가능하고, 내가 원하는 기능대로 커스텀이 가능해 활용도가 매우 높아 보인다.
요즘 드는 생각이 한번에 너무 많은것을 알아가려 하는 것 보다, 하나라도 제대로 알고 넘어 가는 것이 중요 한 것 같다.
잘 알지도 못하는데 개속 넘어가다보면, 나중에 복습해야할 양이 엄청나게 늘어난다.
기초부터, 코드가 어떤 원리로 어떻게 실행되는지, 어떻게 데이터를 주고받는지, 등 확실한 개념을 이해하고 넘어가야 겠다.