Django Project 생성하기
$ django-admin startproject 프로젝트이름
Manage.py
- Django 프로젝트를 터미널에서 관리할 수 있도록 명령어를 제공하는 기능의 파일
Django 서버 실행 명령어
$ python manage.py runserver
Django App 생성하기
$ python manage.py startapp polls
- 특정한 기능을 수행하는 웹 어플리케이션으로 App들이 모여 하나의 Project가 됨
- App은 하나의 웹 사이트만 종속되는 것이 아닌, 여러 사이트에서 그 기능을 할 수 있음
- `urls.py` 에서 앱 경로를 지정할 수 있음
모델
- 장고의 모델은 RDB에서 엔티티(테이블)라고 보면 됨
- 모델을 통해 데이터를 편하게 관리 가능
- 별도의 SQL 쿼리문 작성 없이 프로그래밍 언어로 데이터의 CRUD 가능
모델 생성
class Question(models.Model):
question = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
class Choice(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
두 개의 테이블(엔티티)를 위 코드처럼 만듦.
기본키는 자동으로 AUTOINCREMENT 하는 정수형을 만들어줌.
migration 적용
모델을 생성했으면 스키마에도 구조가 변경된 것을 적용해야함.
$ python manage.py makemigrations polls
$ python manage.py sqlmigrate polls 0001
DB 내용 확인하기
$ sqlite3 db.sqlite3
장고의 DB는 기본적으로 sqlite3을 지원하기에 db.sqlite3 파일을 열어 확인 가능함
migration 롤백
$ python manage.py migrate polls 0001
Django Admin
- 관리자들이 데이터를 추가하거나 수정하는 페이지
- 장고에서는 생성한 모델에 대해 웹 페이지에서 데이터를 CRUD하는 기능 지원
- `http://127.0.0.1/admin` 으로 접속 가능
관리자 계정 생성하기
$ python manage.py createsuperuser
모델 등록하기
from django.contrib import admin
from .models import Question, Choice
# Register your models here.
admin.site.register(Question)
admin.site.register(Choice)
- admin이 접근할 수 있도록 코드 추가함
- App 폴더의 admin.py에 위 코드를 추가함
- 이후 admin 페이지에서 손쉽게 등록 가능
Django shell
$ python manage.py shell
장고의 쉘로 접속하려면 위 명령어를 터미널에서 입력함.
모델 사용하기
>>> from polls.models import *
#모든 Question,Choice 오브젝트 가져오기
>>> Question.objects.all()
>>> Choice.objects.all()
#첫번째 Choice 오브젝트 가져오기
>>> choice = Choice.objects.all()[0]
>>> choice.id
>>> choice.choice_text
>>> choice.votes
#첫번째 Choice와 연결된 Question 가져오기
>>> choice.question
>>> choice.question.pub_date
>>> choice.question.id
Django로 웹서비스를 하고, 글로벌 서비스를 수행한다면 파이썬에서 제공하는 `datetime` 모듈보다는 `timezone` 을 사용하자
새로운 모델 생성하기
#create() 메서드를 활용하여 q3와 연결된 새로운 Choice 오브젝트를 생성하고, choice_text 필드에 값을 넣어주기
>>> q3.choice_set.create(choice_text = "b")
#새로운 Choice 오브젝트를 생성하고 question 필드에 q3 값을 넣어 연결하기
>>> choice_c = Choice(choice_text='c', question=q3)
#새로운 Choice 오브젝트를 데이터베이스에 저장하기
>>> choice_c.save()
레코드 수정 및 삭제하기
>>> from polls.models import *
#Question 오브젝트 중 가장 마지막으로 만들어진 것을 가져오기
>>> q = Question.objects.last()
#해당 오브젝트의 question_text에 새로운 내용을 더해 수정하기
>>> q.question_text = q.question_text + '???'
# DB에 수정내용 적용하기
>>> q1.save() #Choice 오브젝트 중 가장 마지막으로 만들어진 것을 가져오기
>>> choice = Question.objects.last()
>>> choice.queston.choice_set.all()
<QuerySet [<Choice: a>, <Choice: b>, <Choice: c>, <Choice: d>]>
#해당 오브젝트를 삭제하기
>>> choice.delete()
>>> choice.queston.choice_set.all()
<QuerySet [<Choice: a>, <Choice: b>, <Choice: c>>
모델 필터링
>>> Question.objects.get(id=1)
<Question: 제목: 휴가를 어디서 보내고 싶으세요?, 날짜: 2024-04-07 14:34:00+00:00>
# '휴가를' 로 시작하는 행 찾기
>>> q = Question.objects.get(question__startswith='휴가를 ')
>>> q
<Question: 제목: 휴가를 어디서 보내고 싶으세요?, 날짜: 2024-04-07 14:34:00+00:00>
- 한 개만 가져올 때는 `.get()` 사용
>>> Question.objects.filter(pub_date__year=2024)
<QuerySet [<Question: 제목: 휴가를 어디서 보내고 싶으세요?, 날짜: 2024-04-07 14:34:00+00:00>, <Question: 제목: 가장 좋아하는 디저트는?, 날짜: 2024-04-07 14:34:22+00:00>, <Question: 제목: 커피 vs 녹차, 날짜: 2024-04-08 05:43:35.350925+00:00>, <Question: 제목: abc???, 날짜: 2024-04-08 05:45:30.479683+00:00>]>
- 여러 개가 반환된다면 `.filter()` 사용
- 이 경우, QuerySet 이라는 집합으로 결과를 반환함
'데브코스-데이터엔지니어링' 카테고리의 다른 글
Airflow 설치 - Docker (0) | 2024.05.23 |
---|---|
장고 활용한 API 서버 만들기(2) (0) | 2024.04.23 |
Seaborn 시각화 라이브러리, 기상청 날씨 정보 시각화, 해시코드 질문태그 빈도 시각화, 단어구름 시각화 (0) | 2024.04.06 |
Selenium, WebDriver, Implicit / Explicit Wait, Mouse Event, Keyboard Event (1) | 2024.04.06 |
Python - Web Scraping 기초 (BeautifulSoup4 라이브러리) (0) | 2024.04.03 |