23.04.03~07 WIL
이번 주 한 것들
장고 강의 주말까지 수료: 근데 정리는 아직 못했다.
장고 개인과제 완료: 폼 사용법과 기타 자잘한 디버깅 경험을 얻었다.
깃 특강, 좋은개발자 되기 특강
코딩테스트 풀이 총 14개+ : 다음주에는 하루에 두개 씩만 풀자
새롭게 알게 된 것들 정리
python, 알고리즘 관련
1. return, print에서의 and/or사용
return, print에서 and를 쓰면 다음과 같이 반환/출력한다.
참1 and 참2: 참2 출력
거짓1 and 참2: 거짓1 출력
참1 and 거짓2: 거짓2 출력
거짓1 and 거짓2: 거짓1 출력
or를 쓰면 다음과 같이 반환/출력한다.
참1 or 참2: 참1 출력
거짓1 or 참2: 참2 출력
참1 or 거짓2: 참1 출력
거짓1 or 거짓2: 거짓2 출력
이러한 특성 때문에 반환후 다른 함수에서 쓸때는 논리연산의 결과로서 True/Flase를 반환하는 것으로 보일 수 있다.
2. int의 특성
1. 파이선의 int는 사실상 크기 제한이 없다(arbitrary precision). 크기 제한이 있는 것은 문자열이다.
2. int()는 숫자로 이루어진 문자열을 지정된 base(진수)의 숫자로 받아들여 10진수로 바꾸어 주는 역할을 할 수 있다.
다음과 같이 사용한다.
num=int('222',3) # 26
num=int('223',10) # 223
3. Distribution count sorting
입력 크기에 비해 값의 범위가 매우 작고 그 범위를 알고 있을 때는 distribution count sorting이 매우 효과적이다. (O(n))
4. 내장 정렬메서드 특성
- python sort, sorted는 팀 정렬을 이용한 stable한 정렬이다.
- key값을 지정할 수 있으며 단순히 item의 일부가 아니라 어떤 연산의 결과또한 지정가능하다
5. 딕셔너리 내장 메서드 들을 정리하였다.
6. 에라스토테네스의 체에 대해 알게되었다.
7. 반복문 내에서 인덱스를 변화시키는 동작을 수행하는 것은 나쁜 생각이다.
당신은 죽을 수도 있습니다.
8. zip은 입력된 이터러블한 자료형들의 인덱스가 같은 요소들을 묶어 새로운 이터러블한 자료형(zip)을 만든다.
이를 이용해 행렬을 전치(transepose) 하는데 사용할 수 있다.
9. re.sub()
정규표현식, 바꿔넣을 문자열, 패턴을 찾을 문자열을 인자로 받아 주어진 문자열에서 정규표현식과 일치하는 패턴을 찾아내 치환하는 함수이다.
Django 관련
'/' 로 시작하지 않으면 상대경로다.
제발 이런걸로 몇시간 씩 허비하지 말자.
urls.py에서 api를 추가할 땐 루트에 대한 상대경로로 작성하고 마지막에 / 를 붙이는 것이 좋다.
views.py에서 redirect 할때는 절대 경로로 쓴다. 맨 뒤에 / 없어도 된다.
템플릿에서 요청을 보낼때는 절대 경로로 쓴다. 맨뒤에 / 붙인다.
Form
장고의 form은 다양한 장점을 가지고 있으며 장고가 생산성 높은 프레임워크가 되게하는 중요한 요소중 하나이다. (다른하나는 모델)
폼은 올바른 데이터만 처리할 수 있게 검증기능을 제공하며, 모델폼 기능을 통해 모델과 동일한 필드를 가지는 폼을 자동 생성할 수 있다.
Model Fields가 DB Field 들을 파이썬 클래스화한다면, Form Fields는 HTML Form Field 들을 파이썬 클래스화한다.
프레임워크를 쓸때는 클래스의 인자, 부모가 어떤지 등을 잘 확인하자.
부모를 찾아가서 면담도 하고 어떤 아이인지 가정환경이 어떤지 좀 알아보면서 무슨 인자가 필요한지도 보고 그렇게 해야 이상한 오류 지옥에서 못나가는 불상사가 안난다.
모델 필드 관련
1. validator
유효한 값의 범위를 지정할 수 있다. form을 통해 유효하지 않은 값이 들어올때 is_valid() 메서드를 이용해 걸러낼 수 있다.
from django.core.validators import MinValueValidator # 벨리데이터 임포트
class InBound(models.Model):
class Meta:
db_table = 'inbound'
cost = models.IntegerField(validators=[MinValueValidator(0)]) # 필드에 적용
amount = models.IntegerField(validators=[MinValueValidator(0)])
2. choice
이 인자에 키-밸류 쌍을 맞춘 튜플 리스트나 튜플의 튜플을 넣어 필드를 입력할 때 직접 입력하지 않고 선택지중 선택을 하게 만들 수 있다.
3. auto_now Vs. auto_now_add
전자는 최근 변경 시간을 저장하고 후자는 최초 생성 시간을 저장한다.
4. help_text
각 필드에는 help_text 가 달려 있을 수 있다. 이를 제거하기 위해서는 다음과 같이 하면 된다.
self.fields[fieldname].help_text=None
5. 필드에 기본값 설정
default='' 등으로 기본값을 설정해주면 기존에 해당 필드의 값이 없던 데이터도 알아서 기본값을 적용해 오류를 막는다. 혹은 null=True를 설정해도 된다.
Git 관련(.gitignore)
gitignore에 적었는데 적용이 안되는 경우
이러한 문제는 git 이 캐시에 저장해두는 것 때문에 생겼던 것이었다. 아래와 같이 캐시를 삭제하고, 변경사항들을 다시 스테이지에 올려서 커밋하면 해결되었다.
git rm -r --cached .
git add .
git commit -m "fixed untracked files"
하지만!
gitignore를 시작부터 작성하지 않고 중간에 수정하면서 프로젝트를 진행하면, 깃헙에 올려선 안되는 민감한 정보가 들어있는 코드가 커밋 히스토리상에서 조회가능할 수 있으므로, 그냥 처음부터 관련 사이트를 이용해 애초에 제대로 작성해놓고 시작하는게 좋다.
이번주 목표 성취 회고
- 알고리즘/자료구조 강의와 장고 강의 완강 : 장고 강의는 모두 들었지만, 알고리즘 강의는 듣지 못했다. 그리고 둘다 정리는 하지 못했다. 근데 생각이 바뀐게, 어차피 강의자료에 잘 정리되어있는 내용은 대부분 다시 쓸 필요가 없겠다 싶었다. 그래서 정리는 진짜 핵심적인 부분만 하고, 내가 진짜 코드를 쓰면서 마주칠 시행착오를 기록하는 것에 더 집중하는 것이 좋지 않을까 싶다. 그래서 이건 차주 목표에 새로 적어뒀다.
- 매일 1개 이상 프로그래머스 2단계 이상 수준의 문제 풀이: 이건 애매한데, 2단계문제보단 0~1단계문제가 많았지만 그래도 꽤 많이 풀었다고 생각한다. 시트는 거의 다 풀었으니 다음부턴 진짜 2단계 이상을 1개이상 풀어보자.
- 알고리즘 문제 시트에 주어진 기초 알고리즘 문제들 모두 풀어보기 : 기록하지 않은 문제들을 포함하면 두 문제 남았다. 다음주에 정리까지 같이 끝내버리자.
- 그외: 장고 강의와 개인과제를 통해 프레임워크를 사용하는 방법에 대해 많이 배운 것 같다. 팀 프로젝트가 기대된다.
다음주 목표
- 장고 강의 정리후 포스팅: 1~2강 까지는 해보자.
- 알고리즘 강의 수강/정리: 2강까지 다 수강하고 정리포스팅까지 마무리하자. 정리 할때는 간단하게 구현(중요)코드를 첨부해서 하자.
- 팀 과제에서 git의 포크, 풀리퀘스트, 이슈, 코드리뷰등 최대한 활용해보기: 말 그대로다. 이번 팀 과제는 제대로 해보자.
- 매일 1개 이상 프로그래머스 2단계 이상 수준의 문제 풀이: 꼭 해서 페어프로그래밍 때도 알차게 하자.
- 주말간 벨로그에서 티스토리로 글 이사오기