내일배움캠프 29일차

2023년 04월 25일 by barryjung

    내일배움캠프 29일차 목차

[오늘 한일]

  • 알고리즘 문제풀이
  • 장고 심화 개인과제 진행

페어프로그래밍 3문제 풀었다.

심화 개인과제는 todo list 까지 완료.

 

[오늘 배운점]

 

파이썬

<결과값이 있는 연산 없는 연산>

파이썬에서 문자열이나, 리스트 등에 연산들은 각각 결과값이 있거나 없다.

(각 연산은 https://docs.python.org/ko/3/library/stdtypes.html참고)

 

오늘 문제 풀었던 방법에서 사용한, 리스트 연산인 reverse()도 결과값이 없다.

reverse를 대신해, 이터러블 데이터를 뒤집은 결과를 주는 reversed() 연산을

list(reversed(리스트))로 써서 결과값을 내게 할수 있다.

 


<리스트 컴프리헨션안 조건문의 위치>

리스트 컴프리헨션에서 조건문을 조합할때는,

두 위치에 조건문을 넣을수 있는데 각각 역할이 다르다.

 

[x for x in array]

이런 기본형이 있을때

첫 x뒤에 적을수 있고,

array 뒤에 적을수 있다.

 

첫 x인 요소 뒤에는

x if 조건 else 대체값, 의 형태로 적어야 한다.

이 경우는 array를 모두 반복하며 조건이 맞을때는 x, 틀릴때는 else의 대체값을

요소로 채운 리스트를 반환한다.

 

반복문의 array뒤에 적을때는 

if 조건, 으로만 적어야 한다.

이 경우는 반복문에 포함된 조건문인 것처럼,

array를 반복할때 조건에 해당되는 x만을 반복하게 된다.

 


<2진수 ↔ 10진수 연산>

2진수 바꾸기 문제를 저번에 난 함수로 작성해서 풀었었다.

그런데 오늘 다시 풀어보며 그 역할을 해주는 연산에 대해 알게됬다.

 

int(2진수, 2) 이렇게 적어준다면

숫자는 입력된 2진수이고,

뒤에 적은 속성은 미수로 앞의 숫자가 몇진수인지를 지칭해준다.

이걸로 2진수를 10진수로 만들수 있다.

 

다시 10진수를 2진수로는

bin(10진수)[2:] 이렇게 작성하면 된다.

bin은 10진수를 2진수로 바꾸며

0b0101이런식으로 반환해주는데, [2:]옵션을 주어 앞의 두개 구분자는 떼어주었다.

 


 

장고

<로그인한 세션은 DB에 남는다.>

오늘 로그인 기능을 고민하면서, 복습을 많이 했다.

세션기반, 토큰기반 특강도 다시 들었다.

 

두개의 큰 차이점은 세션은 DB에 세션정보를 저장하고,

유저의 요청마다 세션을 검사한다.

반면 토큰은 DB에 저장하지 않고 사용자에게 부여해주는 것으로,

유저가 요청 때 토큰을 제시하기만 하면 된다.

 

신기해서 지난 프로젝트 만든것에서 DB 세션에 생기는걸 확인해봤다.

사용자로 로그인을 하자 세션이 하나 추가된 모습이다.

 

지금 심화과제는 둘중 선택해서 작성하도록 되어있다.

나는 토큰기반으로 만들고 있다.

 


[알고 싶은 점]

<AbstractUser, create superuser에 막히다.>

나는 어제 개인과제 유저모델을 AbstractUser로 작성해서 진행했다.

그런데 오늘 결국 난관에 봉착했다.

create superuser를 하면, email과 password를 입력받지만,

입력 후에는 username 입력이 없다는 에러가 나온 것이다.

 

TypeError: create_superuser() missing 1 required positional argument: 'username'

인터넷으로 알아봤지만,

결국 username을 찾지 않게 하는 방법은 알수 없었다.

 

결국, User모델을 AbstractBaseModel과 BaseUserManager 조합으로 변경해서 진행했다.

사실 단순히 이런 차이가 두 방법의 차이 인것일수도 있겠다.