어떠한 함수를 작성하고 이 함수 앞뒤로 실행해야할 코드를 정의하는데 있습니다.
로그인 데코레이터 같은 경우 회언이 댓글을 작성하거나 특정권한을 가지고 있는지 확이날때 사용합니다.
import jwt
import json
from django.http import JsonResponse
from .models import {자신의 app models}
from {key 가져오는 경로} import SECRET_KEY
def login_decorator(func):
def wrapper(self,request,*args, **kwargs):
if "Authorization" not in request.headers:
return JsonResponse({"message":"해더에 Authorization라는 값이 없을경우 메시지"},status=401)
token = request.headers["Authorization"]
try:
user_token = jwt.decode(token,DBConnent.SECRET,algorithm='HS256')
user = models.User.objects.get(id=user_token["id"])
request.user = user
except jwt.DecodeError:
return JsonResponse({"message":"토큰이 값이 없을 경우"},status=401)
except models.User.DoesNotExist:
return JsonResponse({"message":"토큰값을 decode한 값이 유효하지 않는 경우"},status=401)
return func(self,request, *args, **kwargs)
return wrapper
사용 예시
class CommentView(View):
@login_decorator
def post(self, request):
data = json.loads(request.body)
try:
user = User.objects.get(id=request.user.id)
posting = models.Posting.objects.get(id=data["posting"])
models.Comment(
user=user,
posting=posting,
content=data["content"], ).save()
return JsonResponse({"message": "SUCESS"},status=200)
except KeyError:
return JsonResponse({"message": "KEY_ERROR"}, status=400)
Postman으로 확인

body의 내용

위 로직은 사용자가 댓을 달려고 할때 로크인 데코레이터를 적용한 사례입니다.
데코레이터를 해석하면 userid값이 오며 이 값을 objects.get 으로 해석해서 유효값인지 확인합니다.
'Djnago' 카테고리의 다른 글
[Django] DB Query_Count And Logging (0) | 2020.08.09 |
---|---|
[Django] prefetch_related (0) | 2020.07.25 |
[Django] 기본 세팅 (0) | 2020.07.16 |
[Django] Custom command Create (0) | 2020.07.04 |
[Django] Django-tutorial 따라하기 1-2 (0) | 2020.07.02 |
댓글