drf로 회원가입 만들기
pure django복습 겸 프로세스 이해를 위한 정리.
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('users/', include('users.urls')),
]
from django.urls import path, include
from rest_framework_simplejwt.views import (
TokenObtainPairView,
TokenRefreshView,
) #jwt
from users import views
urlpatterns = [
path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
# 위 두 줄은 jwt를 위한 것
path('signup/', views.UserView.as_view(), name='user_view'),
]
from rest_framework.views import APIView
from rest_framework import status
from rest_framework.response import Response
from users.serializers import UserSerializer
class UserView(APIView):
def post(self, request):
serializer = UserSerializer(data=request.data) #serializer.py에서 가져옮.
if serializer.is_valid():
serializer.save()
return Response({"message":"가입 완료!"}, status=status.HTTP_201_CREATED)
else:
return Response({"message":f"${serializer.errors}"}, status=status.HTTP_400_BAD_REQUEST)
from rest_framework import serializers
from users.models import User
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = "__all__"
serializers.py
# 여기가 중요★★★ 해싱을 해줘야 data에서 password를 암호화해서 저장함.
def create(self, validated_data):
user = super().create(validated_data)
password = user.password
user.set_password(password)
user.save()
return user
이 함수가 없으면 회원가입을 할 때 password가 암호화되지 않고 그대로 저장되어 로그인 시 인식하지 못함!!
해싱을 해줘야 암호화되어 DB에 저장 가능!