본문 바로가기
AI 웹개발반

[TIL] python class, 장고 자주 쓰는 코드 정리

by 째깍단 2023. 4. 20.

오늘 한 것

 

[O] : 알고리즘 풀이   - 백준 3003 킹, 퀸, 비숍, 룩, 나이트, 폰

 

[△] : 장고 심화 강의 듣기

- 1.5~ 3주차까지는 듣고 싶다 : 듣는 중... TIL 올리고 더 들을거임..

 

[O] : 후발대 강의듣기 7-9

 - 오늘 강의로 애매했던 개념을 확실히 잡은 것 같다! Good!

 

 

 

알게 된 것

 

- python class

  • super()
    기존 기능에 +a 해주고싶다! 할때 사용한다
    기존 기능에서 일부분을 수정하고싶으면 처음부터 새로 오버라이딩하는 방법밖에 없다.
    그래서 한 함수 내에서 모든 기능을 쓰지 않는다!바뀔 가능성이 있는 함수를 나눠놓고 그 함수를 오버라이딩, 필수 기능이면 묶고 등등 상황에 따라 적용함

 

  • __init__(self, *args, **kwargs)
    • 실행 함수 __init__, class를 불렀을 때 자동으로 실행되는 부분이다.
    • * 동적인 값을 받겠다 의미
       *args 는 자주쓰지는 않지만 고정된 값을 받아 변경할 필요가 없을 때 받게됨 ex. 계산기같이 고정된 일반 값을 받는경우
       **kwargs 훨씬 많이 사용, 데이터 받는 기본 값!
    • 입력값을 앞에서부터 차례로 받아가므로 입력 순서 지정도 중요함!


    • *: list(args) 언패킹
    • **: dict(kwargs) 언패킹

 

# 함수에 list로 된 값을 입력할때도 *를 쓴다.

def add (a, b, c):
	print(a, b, c)

add(*[1, 2, 3])
add(1, 2, 3)

#결과는 동일하지만 값을 *args로 받으면 깔끔!
def add(*args):

add([1, 2, 3]) #결과 ([1, 2, 3])
#이렇게 넣으면 해당 list가 [0]번 요소로 들어감

 

 

  • sort_dicts=False는 데이터가 입력되어있는 순서대로 나오도록 한다.
print(set_profile(**profile), sort_dicts=False)

 

 

 

 

 

 

- Django useful codes

  •  아래 둘은 같은 값을 가져온다.

코드의 효율 면에서는 **request가 더 낫겠지?

 

 

 

 

 

  • 장고에서 원하는 데이터 찾아오기

 

 

데이터 object 가져오기

 

Try : 
	article = Article.objects.get(id=article_id)
except Article.DoesNotExist:
	return Response({“error”: “존재하지 않는 오브젝트”}, status=400)

 

=> get은 거의  try except 랑 쓰인다고 보면 됨

get을 가져오지 못하면 오류가 무조건 나게 되어있기 때문.

또는 get_object_or_404 모듈을 사용하면 된다.

From django.shortcuts import get_object_or_404

 

 

 

 

 

데이터 queryset 가져오기

 

Article.objects.filter(created_data=“날짜“)  #날짜와 같은 데이터 
Article.objects.filter(created_data_lte=“날짜“)  #날짜 이전인 데이터
  • lt. : less than <
  • lte : less than equal <=
  • gt : greater than >
  • gte : greater than equal >=

  • filter.(key값__여기에_쓴다="value"
  • __contains ~를 포함하는 조건으로 데이터 검색
  • __in=["운동", "산책"] 이 list 에 포함되어있는 데이터 검색
  • __startswitch ~로 시작하는 데이터 검색
  • __endswith ~ 끝나는 데이터 검색
  • filter  특정 조건이 매칭되는 데이터를 가져옴
  • exclude 특정 조건을 제외하고 데이터를 가져옴

 

 

 

 

 

추가 필터링 or 제외하기

 

- 방법1 : 한 줄 씩 작성해 queryset 변수에 담아주기

queryset = Model.objects.filter(title__contains="제목") 
queryset = queryset.objects.filter(created_at__gte="2023-01-01")
queryset = queryset.objects.exclude(is_active=False)

 

- 방법2 : 조건을 한 문장에 넣기

쉼표로 , 구분하여 한 줄에 담아도 된다. (and 조건. 두 조건을 모두 만족하는 결과물만 필터링이 됨)

Model.objects.filter(title__contains="제목", content__contains="내용")

 

or 조건을 사용하고 싶으면 Q 모듈과 | 파이프를 사용해 표현한다.

from django.db.models import Q
Article.objects.filter(Q(title__contains=”제목” | content__contains = “내용”))

 

 

 

 

 

쿼리셋 정렬

 

order_by(“created_at”) 정순

order_by(“-created_at”) 역순

order_by(“?”) 무작위    ->python random model = pseudo  이게 뭔말입니가..? 나머지 공부 당첨

 

 

 

 

 

조건에 맞는 object를 가져오거나 (없다면) 생성하기

 

- get or create : 검색해서 가져오거나 만들어라!

obj, created = Article.objests.get_or_create(
	title=“제목”,
	content=“내용”,
)

 

 => 왜 변수가 2개일까?

def get_or_create(**kwargs):
	return kwargs, True(False)

obj, created = get_or_create()      #get값, create값 2개를 받기때문에 변수도 2개

print(obj, create)

 

 

 

 

 

 

 

 

이전 학습내용을 바탕으로 내일 할 것

  • 내일 오전 강의있음 10시!
  • 장고 심화 강의 마저 듣기
  • 이번주 공부한 것 정리하기

 

 

  • 주말동안 하고싶은 것
    - 지난 팀프 코드 고도화
    - 장고 튜토리얼 끝내기

 

 

 

 


느낀점:

열심히는 사는데 걸음이 늦어지는 기분이 든다.

폭발적 성장의 시기는 지나버린 듯..

그치만 아직도 모르는게 많고, 지금도 느려졌을 뿐이지 성장 안하고 있는건 아니니까 힘을 내쟈! 빠샤