- 내일배움캠프 18일차 목차
[오늘 한일]
- 장고 개인과제 해설 수강
- 팀원간에 개인과제 리뷰
- 팀 프로젝트 진행
- 개발자 학습법 특강 수강
[오늘 배운점]
<장고 알게된점들>
개인 과제 해설을 들으며 알게된 포인트들이다.
- startapp은 python manage.py 명령어로도 가능하다.
- 장고는 본래 프로젝트폴더의 urls만 본다.
- size 선택지 같은 튜플은. 변수명을 보통 대문자로 작성한다.
- CharField. 캐릭터 필드라고 읽는다.
- IntegerField. 인테저 필드라고 읽는다.
code = models.ForeignKey(Product, on_delete=models.CASCADE)
- 모델에서. 참조 키를 작성할경우. on_delete를 꼭 작성해줘야 한다.
- on_delete의 종류는 6개정도 된다.
- 연관데이터가 지워지면 어떻게 처리하겠냐는 설정인데, CASCADE는 같이 지우겠다는 뜻이다.
- views함수 데코레이터부분중 @transaction.atomic.
해당 함수의 처리중 DB전송오류가 나면 함수에서 처리했던 모든 DB전송을 롤백한다.
- django.http import Httpresponse로 간단한 리스폰스를 줄수있다.
- 만약 기본 로그인/회원가입을 사용하는데 forms도 작성하지 않겠다면,
views에선 getusermodel로 기본 유저 모델을 불러온다.
(여기다가 request를 담아준다.)
그리고 패스워드는 set_password를 한번 실행하여 암호화시키고 저장한다.
- 로그인은 authenticate로 검사하고 login처리한다.
- filter와 get의 차이점은, get은 찾는 값이 무조건 하나 존재해야한다.
결과가 없거나 두개 이상이면 에러를 발생한다.
그래서 try, except문과 자주 조합해서 사용된다.
filter는 0개여도, 1개여도, 여러개여도 queryset을 리턴해준다. (리스트처럼 생겼다)
- validation은 조건문을 하나하나 쓰지 않고 몇줄로 작성하는 방법이 있다. (나중에 배울 예정)
form에서는 is_valid로 해결.
<OneToOne필드와 외래키 차이>
code = models.ForeignKey(Product, on_delete=models.CASCADE, unique=True)
- 외래키+unique=True를 작성한 것과 원투원 필드는 기능상 같다.
(그래서 원투원 필드를 쓸것을 권고하는 알림이 나온다.)
원투원 필드는 두 데이터가 일대일일때 사용한다.
반면 외래키는 참조하는 데이터에 연결된 데이터가 여러개일때 사용한다.
참조하는 데이터쪽에서 연결 데이터 쪽 값을 가져오는걸 역참조라고 한다.
역참조를 위해서는 related name설정과 _set구문이 붙어있어야 한다.
그런데 OneToOne 필드는 그런 설정이 없어도 역참조가 가능하다.
product.inventory.ammount
역참조를 하는 건 이런식이다.
product.inventory의 ammount를 가져와서 가공하거나 데이터를 제공할수 있다.
이걸 진작에 알았으면 내 개인과제에 views부분이 조금 더 깔끔해졌을것 같다.
- 외래키, 원투원을 불문하고 참조하는 데이터가 Product이니,
필드명을 product로 하는게 의미상 좋다.
처음에는 이걸 잘 이해못해서 code가 구분자 역할이 될줄알고 code라고 이름을 줬는데,
지금 다시 생각해보면, 외래키, 원투원 필드에 작성되는 건 해당 데이터의 id니까,
데이터 명을 주는게 적합해 보인다. (데이터명_id 이런 필드명으로 저장된다.)
<모호한 부분들>
복습하는대로 수정할 예정.
딕셔너리.get("키") 와 딕셔너리["키"]의 차이.