AI 부트캠프 - Django

Cookie Baking·2024년 12월 19일

AI 부트 캠프 TIL

목록 보기
34/42

Model

  • 저장할 데이터에 대한 필드와 동작들을 포함한 데이터베이스 구조
  • Django는 Model을 이용해서 데이터를 조작
  • 일반적으로 하나의 Model은 하나의 데이터베이스 테이블을 의미

Migration

  • Python으로 작성한 model의 코드가 데이터베이스에는 반영이 안된 상태이기 때문에 Migration이 필요함
# 현재 모델의 변경사항을 마이그레이션으로 생성
python manage.py makemigrations

# 데이터베이스에 반영되지 않은 마이그레이션을 반영
python manage.py migrate

=============================
# 마이그레이션 목록과 적용여부를 보여줌
python manage.py showmigration

ORM

SQL 안쓰고 Pythjon으로 DB를 조작할 수 있도록 하는 것

# 생성
article = Article()
article.title = "첫번째 기사"
article.content = "본문"
article.save()

# 조회
Article.objects.get(content='my_content') # 두개 리턴되어 에러
->
Article.objects.get(id=1)

# 수정
article = Article.objects.get(id=1)
article.title = 'updated title'
article.save()

# 삭제
article = Article.objects.get(id=1)
article.delete()

LOOCKUP

# 2보다 큰 id
Article.objects.filter(id__gt=2)

# 1, 2, 3에 속하는 id
Article.objects.filter(id__in=[1, 2, 3])
Article.objects.filter(content__contains='my')

POST 요청

form을 POST요청으로 넣는다면
csrf 토큰을 넣는 것이 디폴트

Form

  • 다중 선택지 주는 방법
    GENRE_CHOICES = [
        ("technology", "Technology"), # 실제 DB에 저장될 값, 보여질 값
        ("life", "Life"),
        ("hobby", "Hobby"),
    ]
    
    genre = forms.ChoiceField(choices=GENRE_CHOICES)

Auth

settings.py에서 확인 가능

  • django.contrib.auth -> 인증 핵심 로직과 관련된 기본 모델
  • django.contrib.contenttypes -> 사용자의 모델과 권한을 연결

인증과 권한을 합쳐서 Auth라 함

  • 인증 : 내가 누구인지를 입증하는 것
  • 권한 : 수행할 수 있는 자격 여부

쿠키

  • 서버 -> 웹 브라우저에 전달하는 작은 데이터 조각임, 유저가 웹을 방문하게 되면 서버로부터 쿠키를 전달받음
  • key_value 형태로 데이터가 저장됨
  • 이후 동일한 서버에 보내는 모든 요청에 쿠키가 함께 전달됨
  • 쿠키 데이터는 유저의 로컬에 저장되는 정보

세션과 쿠키가 쓰이는 방법

  1. 클라이언트가 서버에 접속하면
  2. 서버가 특정 session id를 발급하고 기억
  3. session id 전달받아 쿠키에 저장
  4. 이후 클라이언트는 해당 쿠키를 이용해서 요청
  5. 서버에서는 쿠키에서 session id를 꺼내서 검증
  6. 검증에 성공했다면 알맞은 로직을 처리

-> 쿠키에 민감한 정보를 저장할 필요 없이 session id만 저장하고 서버에서 검증하는 방식으로 사용함
-> 로그인은 이러한 절차로 구현됨

쿠키의 수명

  • 세션 쿠키 : 현재의 세션이 종료되면 삭제됨
  • 지속 쿠키 : 디스크에 저장되며 브라우저를 닫거나 컴퓨터를 재시작해도 남아있음, Max-Age를 지정하여 해당 기간이 지나면 삭제가 가능함

blank=True # form에서 해당 값을 입력하지 않아도 괜찮음
null = True # Text가 저장되는 컬럼에서는 권장되지 않는 사항
역참조하는 옵션 : (Article -> Comment), article.comment_set.all()
comment_set이 아닌 comments로 하고 싶다면? -> comment의 article에 related_name에 "comments"를 명시


  • RAG From Scratch 유튜브
  • 랭체인 위키 독스

Logical routung

  • 여러 개의 인덱스가 있을 때, 질문의 특성에 따라 적절한 인덱스를 선택하여 쿼리하는 프로세스
  • 이때 모든 인덱스를 뒤지는 것이 아닌 필요한 소스만 활용하므로 리소스를 효율적으로 사용할 수 있음

여러 DB에서 검색해야 하는 경우 -> datasources를 리스트 형태로 넣어주면 됩

Semantic routing

  • 유사도를 추가한 라우팅 방법

0개의 댓글