TIL - 42 Westagram -2

이동근·2021년 2월 4일
0

django

목록 보기
7/12

Mission - 2 회원가입 엔드포인트

2-1 models.py를 통해 db 구현하기

  • 회워가입을 구현하기 위해 주어진 조건을 보게 되면 회원 가입에서 받아야 할 내용은 name, phone_number, email, password 이다. 그래서 각각 칼럼으로 설정을 해주었다.

  • 처음에는 password 를 다른 클래스로 따로 만들었으나, 굳이 그렇게 만들 필요가 없다고 생각해서 합쳐줬다. 저장해야할 db가 두 개가 되면 나중에 Views.py를 구현 하는데 있어 불필요한 작업이 많이 들어갈 것 같아서 이다.

  • 각각 모두 CharFied를 주어서 정수형으로 모두 맞춰 주었다. 그리고 중복이 되지 않기 위해서 Unique 셋팅을 해주었다.
    (Unique을 속성으로 True를 해주게 되면 필드에 중복값이 있는 모델을 저장하려고하면 IntegrityError을 return 해준다.)

  • str : 해줌으로서 shell에서 검색했을 때 리턴 받을 형식을 정해주고

  • class Meta: db_table : 설정을 해줌으로서 table명을 정의해 주었다.

필요한 models.py 구성은 모두 끝이 났다. 이제 django flow의 심장인 views.py에서 회원 가입을 구현하면 된다.

2-2 views.py 회워가입 구현하기

https://velog.io/@eagle5424/TIL-35-Http
https://velog.io/@eagle5424/TIL-38-django-http

HTTP request의 요청에는 앞서 corsheaders 에서 추가했던 POST, GET, PATCH, PUT 등이 있다. 그 중에서 프론트로 부터 데이터를 받아서 models.py를 통해 만들었던 db에 저장을 해줘야 하기 때문에 POST를 통해서 구현하는 것이 옳다고 생각했다.

Views.py를 개발하기 전에 사전 작업이 필요하다.

  • import json : 프론트 개발자분들과의 연결을 위해서 필요한 기능이다. json이란 데이터를 저장하거나 전송할때 많이 사용되는 경량의 DATA교환 방식이다. 이는 데이터 포멧 즉 형식일 뿐이라서 프로그래밍 문법이 아니다. 그래서 프론트와 저희 백 연결시에 사용하기 위해서 import 해주었다.

  • import bcrypt, impor0t jwt 인증 인가 시에 필요하다.

    • bycrpt는 단 방향 해쉬로 만드는 암호화 작업시에 필요한 알고리즘이다. 이 알고리즘으로 salting 작업이 자동으로 이루어 진다.
    • jwt: Mission2에서 이루어지는 회원가입보다는 Mission3에서 이루어지는 로그인 시에 필요한 알고리즘이다. bcrypt를 통해 해쉬화를 시킨 암호를 로그인 시에 확인 하는데 일치 하게 되면 입장권과 비슷한 'TOKEN'을 받을 수 있다. 그 토큰을 제공할때 필요한 알고리즘이다.

차후 bcrpt와 jwt해서 인증인가 -2로 따로 자세히 정리할 예정이다.

https://velog.io/@eagle5424/%EC%9D%B8%EC%A6%9D-%EC%9D%B8%EA%B0%80

  • from django.http import HttpRespose, JsonResponse 프론트에게 Request를 받게 되면 응답으로 보내는 Reponse의 종류 두가지이다. 지금 주로 사용할 내용은 'JSonResponse'이다. 프론트에서 자바형식, json으로 받았기 때문에 우리도 프론트한테 json형식으로 보내줘야한다. 이때 json형식과 비슷한게 파이썬에서의 dictionary형식 이기 때문에 보내줄때 JsonResponse 형식과 함께 dictionary형식으로 보내줘야한다. 형식은 밑에서 코드 설명시 보여드리겠습니다.

  • django.views impor View views.py에서 만드는데 왜 views를 import하냐고 의문점이 들수도 있다. 이 views는 views.py를 구현하기 위해 장고 내장함수들을 불러오기위해서 import를 해주는 것이다. 그래서 우리가 단순히 Post를 구현할 뿐이지만 urls과 연결이 되고 이러는 게 다 이미 구현 되어진 views에 있기 때문인다. 그리고 POST를 구현하면 'def POST(VIEW)' 되어있는데 이게 다 django에서 구현한 VIEW를 상속받아서 쓰기 때문에 넣어준 것이다. 항상 쓸 때 감사하면서 쓰면된다.

  • from django.db.models, from django.db.cres import validation 로그인과 회원가입을 구현하기 위해서 추가적으로 쓰기위해 import 해준 것

  • from .models import Userinfo: models와 연동해서 만들었던 Userinfo를 불러오기 위해서 import해 주었다.

이제 기본적으로 import 끝이났다.

기본적으로 POST를 구현 하는 내용이다.

데이터를 받아서 Userinfo 클래스에 create해주는 방식으로 진행이 된다. 하지만 단순히 POST 하는게 아니고 받아오는 데이터에 관련해서 조건을 걸어주었다.

조건

  • 회원가입시 email을 사용하기 위해서는 '@'와 '.'이 필수로 들어가야 한다. 해당 조건이 만족되지 않을 시 적절한 에러를 반환해 주세요!! 이 과정을 email-validation이라고 합니다.
  • 회원가입시 비밀번호는 8자리 이상이어야만 합니다. 만족이 되지 않으면 반환되고 이 과정을 password validation 이라고 합니다.
  • 회원가입시 서로 다른 사람이 같은 전화번호나 사용자 이름, 이메일을 사용하지 않으므로 중복이 되어서는 안됩니다. 적절한 에러를 반환해 주세요
  • 회원가입이 성공하면 {"message":"SUCCESS"}, status code 200을 반환합니다.
  • 이메일이나 패스워드 키가 전달되지 않았을 시 {"massage":"KEY_ERROR"}, status=400을 반환합니다.
  1. 회원가입시 email을 사용하기 위해서는 '@'와 '.'이 필수로 들어가야 한다. 해당 조건이 만족되지 않을 시 적절한 에러를 반환해 주세요!! 이 과정을 email-validation이라고 합니다.

    -> if 구문을 사용해서 '@','.' 가 data에 없는 경우를 해준다. 그리고 없는 경우에는 MESSAGE로 Invailed_KeyError를 주고 에러코드로 400을 주었다.

  2. 회원가입시 비밀번호는 8자리 이상이어야만 합니다. 만족이 되지 않으면 반환되고 이 과정을 password validation 이라고 합니다.



-> 받아온 데이터를 8자리 이상으로 만 db에 저장하기 위해 조건을 걸어주는 것이다.
그리고 단순히 상수를 적어주는 것이 아니라 변수에 저장해서 조건을 걸어준다.!! 그 이유는 지금이야 숫자가 한개 뿐이 없어서 헷갈릴 이유가 없지만 나중에 코드가 길어지고 하면 수정에 있어서도 용이하고 복잡아지지 않는다.

  1. 회원가입시 서로 다른 사람이 같은 전화번호나 사용자 이름, 이메일을 사용하지 않으므로 중복이 되어서는 안됩니다. 적절한 에러를 반환해 주세요

    -> 이메일, 핸드폰 번호, 이름을 filter로 데이터의 있는지 없는지 유무 확인한후 exists를 사용해서 있으면 True, 없으면 False를 추출해 낸다. 이러한 결과값을 가지고 JsonResponse로 결과를 내고 에러코드 400을 추출한다.

4.회원가입이 성공하면 {"message":"SUCCESS"}, status code 200을 반환합니다.
이메일이나 패스워드 키가 전달되지 않았을 시 {"massage":"KEY_ERROR"}, status=400을 반환합니다.

코드의 완성본이다. email이나 패스워드 키가 전달되지 않았을시 내보내는 에러는 try, except로 예외처리를 해줌으로서 메세지를 보내고 성공적으로 데이터를 저장했을 경우 SUCCESS라는 메세지를 보내느 것에 대해서는 except위에 try 구문 마지막에 구현해 놓았다.

이후 git에 PUSH하면된다!!

추가사항

추가적으로 db에 password를 추가할때 보면 바로 추가되는 것이 아니라 bcrypt를 통해 한번 암호화가 이루어 진뒤 저장이 되어지는 것을 볼 수 있다. 이 내용은 인증인가 -2 로 bcrpyt와 jwt를 할때 자세히 설명 하려고 합니다.

profile
하루하루 1cm 자라는 개발자

0개의 댓글