내일배움캠프 33일차
[오늘 한일]
- 알고리즘 문제풀이
- 장고 개인과제 해설 수강
- 장고 개인과제 복습
- AWS 강의 수강
[오늘 배운점]
파이썬
<대입 표현식>
알고리즘 문제를 풀다가 팀원분이 처음보는 문법을 쓰시는 걸 발견했다.
궁금해서 찾아보니 대입 표현식이라는 것이였다.
변수명 := 조건식, 이렇게 작성할수 있다.
조건문이나 while문의 조건식 부분에 적어줄수 있는데,
조건식에서 처리한 연산을 변수에 담아주는 역할을 한다.
그럼 조건문이나 while 내부에서 해당 같은 부분이 필요할 때,
다시 반복할 필요없이 변수를 사용할 수 있어 중복을 막는다.
예컨대 이런식이다.
while (index := string.find('1231')) != -1:
result = string[index:index+4]
(중략)
while문의 조건식이 find연산의 결과로 -1이 나오기까지 이다.
find연산이 동작하면 문자열에서 1231의 위치를 찾을 거고,
그건 반복문 내에서 index로 참조된다.
이때 index :=를 해주어 반복문 내 변수로 만들었다.
1231이 없어지면 -1을 반환하고 반복문이 종료한다.
(아래 동작은 생략했다.)
결론, 작성하다보면 이런 경우가 자주 있는데,
잘 써먹으면 아주 좋을것 같다.
장고
<개인과제 해설에서 배운점>
몇가지 노하우
- views를 먼저 이름과 주석내용으로만 쭉 작성한다.
그리고 Response로 간단한 메세지를 주게해서 연결성을 확인후 코드작업을 하면 좋다.
- vs code에서 json데이터를 작성해서 post-man에 복붙하면 편하다.
새로 알게된점
- serializers.is_valid(raise_exception=True)
시리얼라이저로 입력값을 받은 후 is_valid로 값을 검증하고 저장하게 된다.
is_valid를 통과하지 못할경우, 위와 같이 작성하면
알아서 작성오류 에러를 유저에게 반환해준다.
반면, 원래하던대로 if not serializers.is_valid():는,
검사가 유효하지 않을 경우 특별한 로직을 실행할거라면 유리하다.
- serializers.py에서 특정 요소를 편집해주는 방법이 있다.
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = UserModel
fields = "__all__"
extra_kwargs = {
"password": {
"write_only":True
}
}
이렇게 작성해 줄수 있다.
exclude는 필드를 아예 제외하는 방법이다.
password에 write_only를 주면 읽을때는 제외하고, 쓰기는 가능하게 해서 스마트하다.
- user = authenticate(**request)는
user = authenticate(email=request['username'], password=request['password'])를 대체한다.
**request를 적어주면 request 딕셔너리에서 authenticate에 필요한 키워드들을 찾아서 가져가게 한다.
- 필수 입력요소에서 제외하는건 여러 방법이 있는데,
위와 같이 serializers에서 extra_kwargs에 "required":False를 설정하는 것도 방법이다.
(유저의 경우 serializers에서 입력이 없어도 save할때는,
request.user에 데이터가 있으니 save시에는 값이 저장된다.)
- object.get(pk=pk).
대부분 pk가 id이다보니, pk=pk와 id=id는 거의 같은 의미다.
pk를 사용해주면 pk인 필드를 알아서 찾는 동작이 있다.
- 목록 조회와 상세 조회를 한방에 하는 노하우를 배웠다.
def get(self, request, pk=None):
이렇게 작성하면 pk입력은 없어도 되고, 있으면 pk를 사용한다.
그래서 pk값의 유무에 따라 목록을 조회하거나 한개를 조회하게끔 한다.
if pk: 조건문으로 분기를 생성한다.
- patch와 put은 둘다 수정 요청이지만 차이점이 있다.
patch는 일부만 수정할때, put은 전체를 수정할때 사용된다.
그래서 patch는 수정할 요소만 전송하고, put은 전체를 전송한다.
put이 대체로 사용된다.
- 유저(회원)의 삭제는 실제로 잘 하지 않는다.
회원 정보가 아예 사라지는 것은 서비스상 좋지 않을수 있기 때문이다.
- views.py에서 데이터를 가공 처리 하는것과
model에서 메소드로 처리 하는것. 둘다 좋은 방법으로 상황에 따라 선택하게 된다.
- views.py에서 비밀번호를 처리할때 request.data.pop("password")로 비밀번호를 빼내서,
set_password를 해줄수 있다.