AI 웹 개발 과정/DRF 특강

DRF 특강 | 1일차

만 기 2022. 6. 15. 12:25

 

환경 : Python (with venv) / VS code / Postman

 

 

DRF : Django Rest Framework

  • 기존 django 에서 확장된 기능들을 이용 ex) Serializer

 

프로젝트 준비하기

 

1. venv 설치

  • python -m venv venv : venv 생성
  • .\venv\Scripts\activate : 가상환경접속 
  • deactivate : 가상환경에서 나오기

2. requirements 활용

  • pip list
  • pip freeze
  • requirements.txt
  • 받을때는
  • pip install -r requirements.txt

 

3. DRF 준비하기 

  • pip install django
  • pip install djangorestframework
  • settings.py - INSTALLED_APPS 에 'rest_framework', 추가
  • rest framework 설정추가
# settings.py
REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': [ # 기본적인 view 접근 권한 지정
        'rest_framework.permissions.AllowAny'
    ],
    'DEFAULT_AUTHENTICATION_CLASSES': [ # session 혹은 token을 인증 할 클래스 설정
        'rest_framework.authentication.TokenAuthentication',
        'rest_framework.authentication.SessionAuthentication'
    ],
    'DEFAULT_PARSER_CLASSES': [ # request.data 속성에 액세스 할 때 사용되는 파서 지정
        'rest_framework.parsers.JSONParser',
        'rest_framework.parsers.FormParser',
        'rest_framework.parsers.MultiPartParser'
    ]
}

 

 

4. git 생성, git ignore 추가, 커밋

 

 


 

 

DRF 강의에 앞서 알아야 할 것들

 

iterable 과 iterator

  • Iterable이란 우선 반복할 수 있는 객체이다.
  • iter() 메소드를 사용하여 Iterator 객체를 생성할 수 있다.
  •  
  • String, Lists, tuples, dictionaries, and sets는 Iterable 객체이다.
  •  
  • Iterator 객체는 __next__() 메소드를 가지며, 다음 순서의 item을 리턴한다.
  •  
  • 모든 Iterator는 Iterable이 될 수 있지만, 모든 Iterable은 Iterator가 될 수 없다.
  • 예를 들어, list 객체는 iterable 하지만 iterator 객체가 아니다.

 

*** 참조 링크 ***

https://www.nemonein.xyz/2021/03/5030/

 

Python: Iterable, and Iterator – 바깥 세상으로

 

www.nemonein.xyz

 

 

mutable 과 immutable

immutable : 수정 불가능한 객체 (int, float, str, tuple). 재할당되면 주소값이 바뀌어버린다.

>>> x = 1
>>> y = x
>>> id(1)
140706521527120
>>> id(x)
140706521527120
>>> id(y)
140706521527120
>>> y += 3
>>> id(y)
140706521527216

y=x가 호출되는 시점에는 동일한 객체를 가르키다가 immutable 타입인 y를 변경했을 때 변경된다는 점이다.

 

 

mutable : 수정 가능한 객체 (list, dict, set). 하나의 주소값을 갖는다.

>>> x = [1,2,3]
>>> y = x
>>> y += [4,]
>>> x
[1,2,3,4]
>>> y
[1,2,3,4]

위에서 두번째 줄까지 실행하면 x, y는 모두 [1,2,3]을 가르키게 된다. 이후 y를 변경하면 x 역시도 변경되게 된다.

 

*** 참조 링크 **

https://wikidocs.net/32277

 

2.1.7 mutable vs immutable

#### mutable과 immutable 파이선은 모든 것이 객체(object)인데, 그 속성이 mutable(값이 변한다) 과 immutable로 구분된다. * ...

wikidocs.net

 

 

 

*args 와 **kwargs

  • 가변인자를 위한 변수
  • args 또는 kwargs는 변수명 이고 * 와 ** 별표를 변수 앞에 붙여주는 것이다.

args 는 함수를 호출할 때 인자가 몇 개 들어올지 모를 때 사용한다.

def add(*args):
    print(args)
    
add(1, 2, 3)

### 출력값 ###
(1, 2, 3)

*args 에 값을 집어넣으면 튜플 형태가 된다. 첫번째 인자에 접근하고 싶을 때는 args[0] 으로 접근 할 수 있다.

 

 

**kwargs 는 args와 달리 파라미터 명을 같이 보내서 딕셔너리 형태로 값을 저장한다.

def name_and_age(**kwargs):
	print(kwargs)
    
name_and_age(name="홍길동", age="50")

### 출력값 ###
{'age': '50', 'name': '홍길동'}

 

함께 사용

def test(*args, **kwargs):
	print(args)
    print(kwargs)
    return True
    
sample_list = [1,2,3,4,5]
sample_list = {
	"key1": "value1",
    "key2": "value2",
    "key3": "value3",
}
Test(*sample_list, **sample_dict)

인자로 넣을때에도 *, ** 을 사용하면 리스트, 딕셔너리를 풀어서 하나하나 인자로 들어가게된다.

 

 

참조 링크

https://velog.io/@hj8853/Python-args%EC%99%80-kwargs

 

 

 

 

stacktrace

 

 

 

코드컨벤션

  • 우리 코드를 짤 때 이렇게 짜기로 약속하자! = rule = 생산성과 관리를 위해서
  • pascal : UserLoginView (class 만들때)
  • camel : userLoginView (파이썬에서 사용안함)
  • snake : user_login_view (class 이외에)
  • 모두대문자 : 상수 (변하지 않는값)
  • list , 쿼리셋 등 : 복수로

 

 

http status code에 대한 이해
    - 2xx : normal
    - 3xx : redirect
    - 4xx : client error
    - 5xx : server error

 

 

기본적인 터미널 활용

  • dir
  • cd desktop
  • cd c:\ 최상위로 이동

 

 

데이터베이스

  • RDBMS : mysql, oracleDB 등 관계형 데이터베이스 (외래키로 다른데이터베이스와 관계)
  • SQL : 데이터베이스의 CRUD 를 위해 사용되는 언어
  • Nosql : mongoDB 같이 관계형이 아닌 
  • 테이블 : DB는 기본적으로 테이블로 이루어져 있으며, 필드와 레코드가 존재한다. 레코드는 django에서 object라는 이름으로 사용된다.

 

 

 

키 종류 

  • Primary key : 데이터베이스 테이블 내에서 유일하게 구분되는 키이다. 유일한 값이기에 중복된 값을 가질 수 없을 뿐 아니라 NULL값을 가질 수 없고 하나의 키만 존재한다.
  • Foreign key : 다른 테이블과 관계를 형성하는 경우 다른 테이블의 키를 참조하는 열을 FK 라고 한다. 자식 테이블에 FK가 포함됨
  • Unique key : pk 와 마찬가지로 중복을 허용하지 않는다. 해당 column 에 입력되는 데이터의 중복을 막기위해 사용하며 각각 column마다 지정가능하다, NULL 값을 허용한다.

 

  • fk에서 사용되는 on_delete에는 여러 속성들이 있으며, 상황에 맞게 사용해야 한다.
    • CASCADE : FK로 참조하는 레코드가 삭제 될 경우 해당 레코드를 삭제한다.
    • SET_NULL : FK 필드의 값을 Null로 변경해준다. null=True가 정의되어 있어야 사용 가능하다.
    • PROTECT : 해당 레코드가 삭제되지 않도록 보호해준다.
    • SET_DEFAULT : FK 필드의 값을 default로 변경해준다. default=””가 정의되어 있어야 사용 가능하다.
    • SET() : FK 필드의 값을 SET에 설정된 함수를 통해 원하는 값으로 변경할 수 있다.
    • DO_NOTHING : 아무런 동작을 하지 않는다. 참조 관계의 무결성이 손상될 수 있기 때문에 권장하지 않는다.

 

 

Queryset 과 object

  • Queryset : 데이터베이스에서 전달받은 객체들의 list. 리스트와 구조는 같지만 파이썬 기본 자료구조가 아니므로 자료형 변환이 필요하다.
  • object : 모델 속성을 가지고 생성된 객체

'AI 웹 개발 과정 > DRF 특강' 카테고리의 다른 글

DRF 복습 퀴즈  (2) 2022.06.23
DRF 특강 | 5일차  (0) 2022.06.21
DRF 특강 | 4일차  (0) 2022.06.20
DRF 특강 | 3일차  (0) 2022.06.17
DRF 특강 | 2일차  (2) 2022.06.16