- 내일배움캠프 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 조합으로 변경해서 진행했다.
사실 단순히 이런 차이가 두 방법의 차이 인것일수도 있겠다.