Django - decorators
5685 ワード
decorators.py
import jwt
from django.http.response import JsonResponse
from .models import User
import my_settings
def login_required(func):
def decorator(self, request, *args, **kwargs):
try:
access_token = request.headers['Authorization']
decoded_token = jwt.decode(access_token, my_settings.SECRET['secret'], algorithms='HS256')
user = User.objects.get(id=decoded_token['user_id'])
request.user = user
return func(self, request)
except User.DoesNotExist:
return JsonResponse({'message':'UNKNOWN_USER'}, status=400)
except KeyError:
return JsonResponse({'message':'KEY_ERROR'}, status=400)
except jwt.DecodeError:
return JsonResponse({'message':'INVALID_TOKEN'}, status=400)
return decorator
これまで登録レコーダは作成されてきたが,個別コードの作成の意味を完全に理解しているわけではない.今回、私はコードを行ごとに計算して、レコーダを書いて、いくつかの漏れた場所を発見して整理しました.
decorator関数のパラメータはselfとrequestを同時に入力する必要があります.
decorator関数はクラス内部で定義されていないため、
self
を入力する必要はないと考えられます.ただし、self
を最初のパラメータとしてrequest
と入力しないと、requestパラメータ値は正常に受け入れられません.さらに、パラメータとして受信した関数を実行するコード
return func(self, request)
のパラメータselfの値は、def decorator(self, request, *args, **kwargs):
のパラメータselfの値で定義されており、パラメータとして「self」を指定しなければ、パラメータとして受信した関数を実行することはできない.結論としては、正確な理由はわかりませんが…装飾モジュールではselfパラメータが必要です.jwt.DecodeError vs json.JSONDecodeError
Except jwt.DecodeError:
:jwtモジュールで生成されたトークンを復号する際に発生する可能性のあるエラーを異常処理するために使用される.Except json.DecodeError:
:HTTP要求本文に含まれるJSONデータ読み出し中に発生したエラーを処理するために使用される.Reference
この問題について(Django - decorators), 我々は、より多くの情報をここで見つけました https://velog.io/@fcfargo/Django-decoratorsテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol