내일배움캠프 18일차

2023년 04월 10일 by barryjung

    내일배움캠프 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("키") 와 딕셔너리["키"]의 차이.