오식랜드
[python] Django API 사용하기 본문
API란 개발자가 필요로 하는 데이터를 불러올 수 있도록, 혹은 데이터베이스에 새로운 데이터를 넣을 수 있도록 만든 함수라고 생각하면 됩니다.
우선, python shell에 진입하여 그 shell 내에서 작업해보자
py manage.py shell
그리고 우리가 만든 Choice와 Question모델을 import하자
from polls.models import Choice, Question
Data 출력
아래 명령어로 모델의 목록을 확인할 수 있다
Question.objects.all()
--> <QuerySet []>
현재는 아무것도 없으니 빈 list가 출력된다.
Data 생성
Question에는 ‘질문’과 ‘발행일’이 있었다.
발행일을 넣어주기 위해서 timezone 라이브러리를 import 하고, q라는 변수에 질문과 발행일을 담는다
그리고 저장
rom django.utils import timezone
q = Question(question_text="What's new?", pub_date=timezone.now())
q.save()
q가 잘 저장됐는지 확인하기 위해 id값을 출력해보자
id값은 직접 넣지 않아도 django에서 자동으로 넣어준다.
q.id
--> 1
id 뿐만 아니라 질문과 발행일도 볼 수 있다.
q.question_text
--> "What's new?"
q.pub_date
--> datetime.datetime(2012, 2, 26, 13, 0, 0, 775217, tzinfo=datetime.timezone.utc)
Data 변경
데이터 변경도 가능하다
q.question_text = "What's up?"
q.save()
q.question_text
--> "What's up?"
Data 확인
데이터를 모두 확인해보면 객체를 표현하는 데 별로 도움이 되지 않게 나온다
Question.objects.all()
--> <QuerySet [<Question: Question object (1)>]>
. polls/models.py파일의 Question모델을 수정하여, [__str__()](<https://docs.djangoproject.com/ko/4.1/ref/models/instances/#django.db.models.Model.__str__>) 메소드를 Question 과 Choice에 추가해 봅시다.
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 self.question_text
class Choice(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
def __str__(self):
return self.choice_text
모델에 [__str__()](<https://docs.djangoproject.com/ko/4.1/ref/models/instances/#django.db.models.Model.__str__>) 메소드를 추가하는것은 객체를 편하게 보려는 이유 말고도,
Django 가 자동으로 생성하는 관리자 사이트에서도 객체가 사용되기 때문입니다.
이 모델에 커스텀 메소드 또한 추가해봅시다:
하루 전 날짜, 시간과 비교하여 1일 이내면 최근 발행물로 표시할 수 있는 함수를 추가했습니다.
import datetime
from django.db import models
from django.utils import timezone
# 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 self.question_text
def was_published_recently(self):
return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
class Choice(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
def __str__(self):
return self.choice_text
완료 후 cmd창에 ctrl+z로 shell을 나간 후, 재진입해줍니다.
py manage.py shell
from polls.models import Choice, Question
그리고 다시 Question 전체 확인을 해보면 아까와 다르게 출력됨을 알 수 있습니다.
Question.objects.all()
--> <QuerySet [<Question: What's Up?>]>
Data filter
django docs에서 다양한 함수를 사용할 수 있다
예시
id값이 1번인 데이터를 불러오기
Question.objects.filter(id=1)
--> <QuerySet [<Question: What's up?>]>
question_text가 ‘What’으로 시작하는 데이터 불러오기
Question.objects.filter(question_text__startswith='What')
--> <QuerySet [<Question: What's up?>]>
'dev-log > python' 카테고리의 다른 글
[python] Django Database 사용 (0) | 2023.01.30 |
---|---|
[python] Django Admin Page (0) | 2023.01.30 |
[python] Django Database 사용 (0) | 2023.01.30 |
[python] Django 프로젝트 생성 (0) | 2023.01.30 |
[python] Django 가상서버 생성 및 진입 (0) | 2023.01.30 |