환경 : 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 역시도 변경되게 된다.
*** 참조 링크 **
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 |