DRFを使用してプロジェクトを再編成(2)
ログイン機能
Logic request.bodyでログイン情報(email,password)を受信します. まず、電子メールがデータベースに存在するかどうかを確認し、電子メールが存在しない場合は、存在しないエラーメッセージをユーザーに送信し、応答します. が存在する場合、ユーザインスタンスおよび要求.body情報を用いてLoginSerializerを生成する. 有効性チェックが完了したらaccesstokenを使用して回答します. DRF - Simple JWT JWT(Json Web Token)を利用するため、DjangorestFramework Simple JWTをインストールして使用しました. を利用すると,ユーザインスタンスを利用して容易にトークンを生成し,有効期間を設定するなど,トークンの管理を支援することができる. SerializerMethodFieldの利用アクセストークンを受信し、シーケンス化器に追加する方法を探したとき、 に必要なフィールドのフィールドをカスタマイズできます.get(fieldname)設定関数を使用して値を設定できます. Total Codes 🗂 github: https://github.com/gemma-Kim/Project-House-Of-Tomorrow
Logic
user = User.objects.get(id=obj.id)
refresh = RefreshToken.for_user(user)
return str(refresh.access_token)
class LoginSerializer(serializers.ModelSerializer):
access_token = serializers.SerializerMethodField()
def get_access_token(self, obj):
user = User.objects.get(id=obj.id)
refresh = RefreshToken.for_user(user)
return str(refresh.access_token)
SerializerMethodField
が理解された.# views.py
class Login(APIView):
def post(self, request):
try:
user = User.objects.get(email=request.data['email'])
serializer = LoginSerializer(user, data=request.data, partial=True)
if serializer.is_valid(raise_exception=True):
return Response(data=serializer.data, status=400)
return Response(data='INVALID_LOGIN_INFO', status=400)
except User.DoesNotExist:
return Response(data='사용자가 존재하지 않습니다.', status=400)
# serializers.py
class LoginSerializer(serializers.ModelSerializer):
access_token = serializers.SerializerMethodField()
class Meta:
model = User
fields = ('id', 'email', 'password', 'access_token')
extra_kwargs = {
'password': {'write_only': True},
'email': {'write_only': True}
}
def validate_password(self, obj):
email = self.initial_data['email']
password = User.objects.get(email=email).password
if check_password(obj, password):
return password
raise serializers.ValidationError('비밀번호가 올바르지 않습니다.')
def get_access_token(self, obj):
user = User.objects.get(id=obj.id)
refresh = RefreshToken.for_user(user)
return str(refresh.access_token)
Reference
この問題について(DRFを使用してプロジェクトを再編成(2)), 我々は、より多くの情報をここで見つけました https://velog.io/@tiiranocode/DRF를-활용하여-프로젝트-리팩토링하기-2テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol