홍카나의 공부방

[DE 데브코스] 04.24 TIL - Django 기초 본문

Data Engineering/프로그래머스 데브코스

[DE 데브코스] 04.24 TIL - Django 기초

홍문관카페나무 2023. 4. 24. 16:59

Django 초기 설정 과정

https://hongcana.tistory.com/29

 

[Django] 장고 명령어 정리(치트시트) - 1

Windows 기준 - django-admin startproject {project 명} => 프로젝트 폴더 및 manage.py 생성 - (Git 설정) .gitignore 설정 체크 => gitignore.io에 들어가서 Django 검색 입력 후 필요에 따라 복붙하고 이용. => git add .gitignor

hongcana.tistory.com

https://hongcana.tistory.com/30

 

[Django] 새로운 프로젝트 만들 때 초기 설정 확인 과정

1. 가상환경 만들기 2. pip install django 3. django-admin으로 프로젝트 시작 ex) 프로젝트 이름을 config로 하고, 상위 폴더 명을 server로 바꿔주며 구성하기 4. (Git 설정) .gitignore 설정 체크 => gitignore.io에 들

hongcana.tistory.com

 

 

sqlite3 터미널로 접속하는 법과 관련 명령어

sqlite3 db.sqlite3

.tables # db에 존재하는 table을 찾을 수 있다.

.schema (table-name) # 해당 테이블의 스키마를 볼 수 있다.

 

 

 

모델 만들기(models.py)

팁 : __str__을 정의해주면 추후 쿼리셋을 사용할 때나 admin 페이지에서 객체를 손쉽게 관리 가능하다.

from django.db import models

# Create your models here.


class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')

    def __str__(self):
        return f'제목: {self.question_text}, 날짜:{self.pub_date}'


class Choice(models.Model):
    question = models.ForeignKey(
        Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=32)
    votes = models.IntegerField(default=0)

 

 

예전 migration으로 롤백

- 롤백하는 경우가 나오지 않게끔 ERD 처음부터 잘짜는게 핵심.

python manage.py migrate 0001 # 0001번으로 롤백

# 이후 apps의 models.py도 수정해주면 됨.

 

 

관리자 생성

python manage.py createsuperuser

혹은 admin page에서 Superuser, Staff 체크해주면 admin으로 승격시킬 수 있다.

 

 

admin.py에 관리할 수 있는 모델 등록하기

예시

from django.contrib import admin
from .models import *

# Register your models here.
admin.site.register(Question)
admin.site.register(Choice)

 

 

뭐 하나 잘못해서 sqlite3 DB 초기화 하기

https://hongcana.tistory.com/68

 

[Django] DB(sqlite3) 초기화 하기

1. 마이그레이션 파일 삭제하기 초기화할 apps안에 있는 migrations 디렉토리 안에 __init__.py를 제외한 모든 파일을 지운다. 2. 데이터베이스 제거 db.sqlite3 파일을 날려버린다. 3. 새 스키마 생성 python m

hongcana.tistory.com

 


 

Django shell을 쓰고 싶어요

  • python manage.py shell을 하면 되지만, 시각적으로 더욱 편리한 ipython을 쓰도록 하자.
  • pip intsall ipython을 진행한 후, shell 명령어로 똑같이 shell을 실행하면 notebook에 가까운 UI를 가진 쉘이 등장.
  • 여기서 Question.objects.all() 같은 명령어를 써서 쿼리셋을 불러오면 훨씬 시각적으로 잘 들어온다.

 

 

정참조와 역참조

  • 모델에서 내가 참조하는(외래키로) 모델은 그냥 (객체이름.field이름.참조하는모델의field) 이런식으로 참조가능
  • 단, 역으로 나를 참조하는 모델을 가져올 때는 역참조를 이용해야 한다.
  • 역참조는 테이블명소문자_set 를 입력하면 가능하다.
  • 역참조를 통해서 레코드를 만들 수도 있다. q1.choice_set.create() 이런식으로...
# example

from polls.model import Question

q1 = Question.objects.all()[0]

# Question 모델에는 Choice라는 모델을 참조할 수 있는 Field가 없는 상태이므로, 역참조
q1.choice_set

 

 

현재 시간 구하기

  • time_zone은 초기 세팅때 settings.py 가서 바꾸기. 맨 위 게시글 링크 참조
from datetime import datetime
datetime.now()

 

 

shell에서 레코드 생성하기

  • shell에서 새로운 객체를 만들어줘도 이를 table에 반영시키지 않으면 제대로 생성된게 아니다.
  • 쉘에서 객체 생성후, save()를 잊지 말기!
from django.utils import timezone

q1 = Question("예시")
q1.pub_date = timezone.now()
q1.save()

 

 

모델 필터링

  • 잘하고 있나~ 확인하고 싶을 때, 뒤에 .query를 붙여주면 SQL 문법 형식으로 뱉어줌.
from polls.models import *

# get() 메서드를 사용하여 조건에 해당하는 오브젝트를 필터링할 수 있다.
# 단, get()은 하나의 객체만 가져올 수 있다.
# 참고) pub_date 필드의 type은 datetime이다.
>> Question.objects.get(id=1)
>> q = Question.objects.get(question_text__startswith='휴가를')
>> Question.objects.get(pub_date__year=2023)


# 하나만 가져오기 싫으면 filter() 메서드를 사용하여 조건에 해당하는 오브젝트를 필터링하기
>> Question.objects.filter(pub_date__year=2023)


#쿼리셋의 SQL 쿼리 살펴보기
>>> Question.objects.filter(pub_date__year=2023).query
>>> print(Question.objects.filter(pub_date__year=2023).query)


#정규표현식을 활용하여 조건에 해당하는 오브젝트들을 필터링할 수 있음
>>> Question.objects.filter(question_text__regex=r'^휴가.*어디')

 

반응형