[DRF] DRF 복습 02. 로그인

Yungsang Hwang·2022년 7월 2일
0

Django-Rest-Framework

목록 보기
1/15
post-thumbnail

DRF 로그인 연습

DRF 로그인/로그아웃 연습


📌문제

  1. DRF 로그인을 위한 API 개발명세를 작성하세요(5분)

    view 이름endpointhttp methodrequestresponse
  2. DRF 로그인을 위한 URL을 작성하세요(1분)

  3. DRF 로그인을 위한 VIEW를 작성하세요(3분)

  4. DRF 로그아웃을 위한 API 개발명세를 작성하세요(5분)

  5. DRF 로그아웃을 위한 URL을 작성하세요

  6. DRF 로그아웃을 위한 VIEW를 작성하세요(5분)

🔥 정답

1) DRF 로그인을 위한 API 개발명세를 작성하세요(5분)

희정

view 이름endpointhttp methodrequestresponsereponse2
UserAPIViewuser/login/POST{

“username” : “admin”,
“password” : “123”
} | Response("error": "존재하지 않는 계정이거나 패스워드가 일치하지 않습니다.") | Response(”로그인 성공”) |

태인

view 이름endpointhttp methodrequestresponseresponse1response3
UserAPIViewlogin/POST{

”username”:”admin”,
”password”:”1234”,
} | ({”message”:”로그인 완료”}) | ({”message”:”존재하지 않는 계정이거나 비밀번호가 맞지 않습니다”}) | ({”message”:”데이터를 모두 입력하세요”}) |

영상

view 이름endpointhttp methodrequestresponseresponse2response3
UserSignView/user/signPOST{

‘username’ : ‘user1’,
‘password’: ‘123’
} | status_200 :
{
‘msg’ : ‘로그인 성공! 환영합니다 {USER} 님!’
} |
{
‘error’ : ‘이미 존재하는 아이디입니다.’’
} |
{
‘error’ : ‘내용을 빠짐없이 입력해주세요’
} |

2) DRF 로그인을 위한 URL을 작성하세요(1분)

from django.urls import path
from . import views

urlpatterns = [
    path('', views.UserView.as_view()),
    path('sign/', views.UserSignView.as_view()),
]

3) DRF 로그인을 위한 VIEW를 작성하세요(3분)

class UserSignView(APIView):
    
    # 로그인
    def post(self, request):
        username = request.data.get('username')
        password = request.data.get('password')
        
        me = authenticate(request, username=username, password=password)
        print(f"me->{me}")
        if not me:
            return Response("유저가 없습니다.")
        login(request, me)
        
        return Response(f"로그인 성공! 환영합니다. {username}님")

4) DRF 로그아웃을 위한 API 개발명세를 작성하세요

희정

view 이름endpointhttp methodrequestresponse
UserAPIViewuser/logout/DELETEResponse("message": "로그아웃 성공!!”")
view 이름endpointhttp methodrequestresponse
UserSignView/user/signDELETEstatus_200 :

{
‘msg’ : ‘로그아웃 되었습니다. {user}님 안녕히.’
} |

태인

view 이름endpointhttp methodrequestresponse
UserAPIViewlogout/DELETE({”message”:”로그아웃 완료”})

5) DRF 로그아웃을 위한 URL을 작성하세요

로그인과 같은 CBV를 사용하므로 URL은 동일하다.

6) DRF 로그아웃을 위한 VIEW를 작성하세요

# 로그아웃
    def delete(self, request):
        user = request.user
        logout(request)
        return Response(f"로그아웃 되었습니다.{user}님 안녕히가세요!")

🚩 체크포인트!

  1. 조회를 제외한 모든 요청에는 CSRF TOKEN이 필요하다!
  2. 커스텀 유저 모델 생성 중 오류 발생
    • 오류 메시지 : 'Manager' object has no attribute 'get_by_natural_key'
    • 상황 : DRF프로젝트를 진행하면서 커스텀 사용자 모델을 만들던 도중, 터미널에서 createsuperuser커맨드를 사용하면 오류가 발생함.
    • 해결 : UserModel 내부의 objects=UserManager() 를 작성해야함. 내 경우에는 objects:UserManager() 로 오타가 나있었음. 자동완성 때문에.
  3. return Response Serializer 오류 발생
    • 오류 메시지 : UNIQUE constraint failed: user_user.username
    • 상황 : 시리얼라이저 값을 변수로 설정하고, return Response(serializer) 이렇게 넣고 값이 나오기를 시도했지만 오류가 발생함.
profile
하루종일 몽상가

0개의 댓글