django API Server practice

강현구·2021년 12월 26일
0

Django

목록 보기
5/12

django라는 web server framework를 처음 접하고 이를 사용해 나의 WebServer를 만들어봤다.
서버를 만들며, 오류가 발생하거나 개선이 필요했던 부분, 주의할 부분 등에 대한 포스팅을 해본다.

django API server

초기 환경 세팅

1) .gitignore 파일에 my_settings.py 환경변수 관리 파일 추가
: github에 push할 때 my_settings.py 파일도 같이 올라가게 되면, 데이터베이스 관련 정보나 서버의 중요한 정보가 노출되어 위험하다.

2) requirements.txt - python Package 관리
: pip freeze를 하면 설치한 패키지 정보를 확인할 수 있다.

pip freeze > requirements.txt 명령어를 사용하면 나오는 리스트를 그대로 파일에 옮겨 담을 수 있다.
하지만 이렇게 할 경우 정확히 어떤 패키지를 설치한 것인지 알 수 없다.
(패키지를 설치하면 그에 따라오는 패키지들이 있을 수 있으므로...)
따라서 실제 pip install 명령어를 통해서 설치한 패키지만 requirements.txt 파일에 저장하도록 해야한다.

3) at Settings.py > DEBUG = True
: 어떤 에러가 발생했을 때, 장고가 에러에 대한 힌트(해석)을 주는 세팅 값
개발 단계에서는 True로 에러에 대한 디버깅을 하고, 배포 단계에서는 False 로 바꾸어서 배포하게된다.
(+ ALLOWED_HOSTS = ['*'] 세팅 역시 배포 단계에서는 반드시 수정해줘야 한다.)

4) APPEND_SLASH = False
: URL의 끝에 '/' 를 추가하지 않는, RESTful한 주소를 만들기 위한 설정.

5) urls.py 파일에서 기본으로 세팅된 import admin을 제거하고 세팅한다.
: 원래는 admin 사이트도 이용하면서 pure django에 추가적으로 더 사용을 하겠지만, 이번 연습에서는 사용하지 않기로 한다.(settings.py 파일에서도 마찬가지로 주석처리로 비활성화 했다.)

Modeling

각 필드의 특성에 맞게 속성값을 설정해야한다.
하나의 정답이 있는 것이 아니라, 자신이 만드는 제품에 맞는 설계와 그에 합당한 설명을 할 수 있는 것이 중요하다.
패스워드와 같은 값은 사용자가 입력한 값 그대로 쓴다면 max_length를 짧게 주면되지만, 암호화를 통해 해시된 값으로 저장해야하기 때문에 충분히 긴 값으로 메모리를 설계한다.

ex) email은 가입 시, 중복되지 않도록 unique = True 속성을 준다.
(= 가입하는 이메일 정보로 사용자를 구분해야한다.)
기타 정보는 가입 시, 입력되지 않을 수 있으므로 null = True 속성을 준다. 등..

리뷰를 통해 수정한 내용:
코드 상에 불필요한 중복이나, 주석은 제거하여 깔끔한 가독성을 유지한다.
경우에 따라 테이블에 데이터가 생성, 변경된 시간을 기록하여 이력 관리를 용이하게 한다.(필수는 아니지만, 일반적으로 만드는게 좋을 것으로 보인다.)
(+ timestamp 모델로 class를 따로 빼서 만들수도 있다, 추가로 공부해볼것.)

컨벤션에 따라 python의 class는 첫글자 대문자로 시작하는 단수형태의 명사를 써주고, table 이름은 전부 소문자로 쓰는 복수값으로 설정해서 구분을 해준다.

기능 구현(회원가입 / views)

회원가입에서 중요점은 입력받은 값이 가입이 가능한지에 대한 부분일 것이다.
'가능하다' 라는 것에는 여러가지 조건이 있을 것인데, 크게는 회원정보의 중복 여부, 아이디, 비밀번호 기준에 부합하는지에 대한 부분 등이 있을 것이며, 당연히 필수 정보에 대한 누락체크도 해야할 것이다.

회원정보, 내가 만드는 서버에서는
1. email에 대한 중복 체크 : email을 unique 속성, 사용자 구분 필요.
2. email의 이름 유효성 체크: '@'과 ' . ' 을 포함한 email인지 여부.(정규식으로 검증)
3. password의 기준 부합 체크: 8자 이상, 문자,숫자,특수문자 포함.
(정규식으로 검증)
4. KeyError : client에서 넘어온 Json body에서 필수 key가 없음.
5. 추가적으로 email외의 unique 속성을 부여한 필드에 대한 검증.

으로 에러에 대한 리턴을 설계 했다.
1~3,5 번은 ValidationError로 유효성 부적합으로 묶어서 오류를 raise시키되, 각 항목의

profile
한걸음씩

0개의 댓글