Django | WeStagram 4. 로그인

김민호·2021년 9월 30일
0

DJANGO

목록 보기
6/18
post-thumbnail

로그인 화면과 models 비교

  • 로그인 할 때는 전화번호, 사용자 이름(id) 또는 이메일 중에 하나를 입력하고 비번을 입력한다.
  • models.py는 회원가입 시 작성한 User 클래스 그대로 사용

로그인 코드 작성

users/views.py 로그인뷰 작성

  • 로그인을 할 때는 사용자 계정과 비밀번호가 필수
  • 계정이나 패스워드 키가 전달되지 않았을 경우, {"message": "KEY_ERROR"}, status code 400 을 반환
  • 계정을 잘 못 입력한 경우 {"message": "INVALID_USER"}, status code 401을 반환
  • 비밀번호를 잘 못 입력한 경우 {"message": "INVALID_USER"}, status code 401을 반환
  • 로그인이 성공하면 {"message": "SUCCESS"}, status code 200을 반환

1.

  • 먼저 로그인 기능을 구현하기 위한 SignInView 클래스를 만들어주었다
  • 중요! 핸들러메소드의 이름을 get으로 했을 때 문제 발생.
    • get으로 했을 때 httpie 로 혼자 통신해봤을 땐 문제 없었음ㅠ
    • 하지만 프론트엔드분과 실제로 통신을 해보니 통신 자체가 안되었음
    • 아직 정확한 원인을 모르겠으나 로그인은 post로 한다는 것과 get으로 request를 보낼 때 body에 아무 내용도 쓸 수 없다는 것을 알게됨✍🏼

2.

  • 로그인 시에는 email과 password만 입력한다고 생각해서 이렇게 만들었음

    그런데 좀 헷갈리는 부분. 로그인 화면을 보면 이메일 대신 사용자이름(id)이나 전화번호로도 가능하고 입력칸은 하나이다. 이메일이 아닌 나머주 2개 중 하나로도 로그인을 할 수 있게 만드려면 어떻게 하면 될지 짜보기

3.

  • 이메일이 존재해야 로그인이 가능한 것이므로 not을 붙여서 이메일이 존재하지 않는 경우(=True 값을 반환하는 경우)에 에러메세지와 status 코드를 반환
  • 비밀번호 조건문 : User 객체에 get메소드를 통해 email이 request로 받은 data['email']과 같은 조건을 가진 인스턴스 객체의 password라는 키가 데이터로 받은 data['password']와 같아야 로그인 성공이므로 같지 않을 경우에 에러메세지와 status 코드 반환

get() 메소드

  • 지정된 조회 매개 변수와 일치하는 인스턴스를 반환
  • 이 매개 변수는 필드 조회에 설명 된 형식
  • 인스턴스를 반환하기 때문에 그 인스턴스의 키에 접근하여 사용 가능
In  : Category.objects.get(id=1)
Out : <Category: Category object (1)>

4.

  • 위의 이메일, 비밀번호 조건문이 통과된다는 것(= JsonResponse({'MESSAGE' : 'INVALID_USER'}, status = 401)을 반환받지 않았다는 것)은 로그인이 성공되었다는 것을 의미하므로 JsonResponse({'MESSAGE':'INVALIED_USER'}, status = 401) 반환

5.

  • email이나 password가 입력되지 않을 경우 except문으로 와서 KeyError 를 발생시킨다

6. 로그인 전체 코드

2. users/urls.py 경로 추가

  • views.py에 SignInView를 작성했으니 import와 path에 추가해준다

통신

현재 Database

1. 로그인 성공

2. 이메일이 틀렸을 때

  • 편의상 "INVALID_USER"를 바꿔줌

3. 비밀번호가 틀렸을 때

  • 편의상 "INVALID_USER"를 바꿔줌

4. KEY_ERROR ✍🏼

profile
개발자로서의 삶은 https://velog.io/@maxminos 에서 기록하고 있습니다 😀

0개의 댓글