Django
데이터 베이스
- 단순히 데이터를 저장한느 창고의 개념이 아닌, 데이터를 사용하기 쉽게 정렬해두어서 유저가 정보를
참조하고 싶을 때 쉽게 바로 사용할 수 있게 해주는 시스템 - 대표적으로 RDB(관계형 데이터베이스)가 이씅ㅁ
- SQL을 사용하여 데이터베이스 관리
장고에서는 SQL을 사용하지 않고 데이터베이스와 상호작용할 수 있는 기법이 존재
ORM
객체 관계 매핑(Object-relational mapping; ORM)은 데이터베이스와 객체 지향 프로그래밍 언어 간의
호환되지 않는 데이터를 변환하는 프로그래밍 기법
\(\Rightarrow\) 장고에는 ORM이 내장되어 있음
Model
homepage/models.pyclass <class name>(models.Model):
from django.db import models
class Coffee(models.Model):
# Field 1
# Field 2
# ...
- 클래스명은 데이터베이스 테이블명이다.
- 각 필드(속성)는 데이터베이스 테이블의 컬럼이다.
models의 필드 타입
- 문자열 : CharField
- 숫자 : IntegerField, SmallIntegerField
- 논리형 : BooleanField
- 시간/날짜 : DataTimeField
- ...
\(\Rightarrow\) 각 필드에 옵션을 인자로 주어 기본사항이나 제약사항을 추가할 수 있음
models.py
from django.db import models
class Coffee(models.Model):
name = models.CharField(default="", max_length=30)
price = models.IntegerField(default=0)
is_ice = models.BooleanField(default=False)
Admin 페이지에서 Model 관리하기
homepage/admin.py- 장고가 기본적으로 제공하는 관리자 App
- (이전 내용에서) superuser 계정을 이용하여 접근할 수 있었음
from django.contrib import admin
from .models import Coffee
admin.site.register(Coffee)
\(\Rightarrow\) admin 페이지에서 model들을 관리할 수 있음
admin 페이지 접속전에 마이그레이션 진행
# 변경사항 확인
python manage.py makemigrations
# 변경사항 적용
python manage.py migrate



+) coffee Object로 표시되어 보기 불편 -> 개선
admin의 객체의 표시 내용은 models.py에서 str 메소드로 지정 가능
models.py
class Coffee(models.Model):
def __str__(self):
return self.name
name = models.CharField(default="", max_length=30)
price = models.IntegerField(default=0)
is_ice = models.BooleanField(default=False)

Template 상에서 Model 보여주기
views.py
...
def coffee_view(request):
coffee_all = Coffee.objects.all() # get(), fileter(), ...
return render(request, 'coffee.html', {'coffee_list': coffee_all})
urls.py
urlpatterns = [
...
path('coffee/', coffee_view), # 127.0.0.1/coffee
]
coffee.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Coffee List</title>
</head>
<body>
<h1>My Coffee List</h1>
{% for coffee in coffee_list %}
<p>{{ coffee.name }}, {{ coffee.price }}</p>
{% endfor %}
</body>
</html>

Template 상에서 Model 내용 변경하기 - Form 이용
forms.py
class <class_name>(forms.ModelForm):
from django.db import models
class CoffeeForm(forms.Model.Form): # ModelForm을 상속받는 CoffeeForm 생성
# form을 만들기 위해 어떤 클래스를 사용하는지 지정해주는 class meta
class Meta:
model = Coffee
fields = ('name', 'price', 'is_ice')
- Meta class
- model : 모델명
- fields : 가져올 필드를 지정
views.py
from .forms import CoffeeForm
def coffee_view(request):
coffee_all = Coffee.objects.all() # get(), fileter(), ...
form = CoffeeForm()
return render(request, 'coffee.html', {'coffee_list': coffee_all, 'coffee_form': form})
coffee.html
...
<body>
...
<form method="POST">{% csrf_token %}
{{ coffee_form.as_p }}
<button type="submit">Save</button>
</form>
...
form 안에는 반드시 CSRF token을 추가해주어야 함!

DB에 저장하는 코드
views.py
def coffee_view(request):
coffee_all = Coffee.objects.all() # get(), fileter(), ...
# 만약 request가 POST라면:
# POST를 바탕으로 Form을 완성하고
# Form이 유효하면 -> 저장!
if request.method == "POST":
form = CoffeeForm(request.POST) # 내용이 채워진 완성된 Form
if form.is_valid(): # 채워진 Form이 유효하다면:
form.save() # Form 내용을 Model에 저장
form = CoffeeForm()
return render(request, 'coffee.html', {'coffee_list': coffee_all, 'coffee_form': form})

'프로그래머스인공지능스쿨' 카테고리의 다른 글
| 데브코스 정리 사이트를 옮깁니다. (0) | 2021.08.27 |
|---|---|
| [6주차 - Day1] ML_basics - Probability (0) | 2021.06.02 |
| [5주차 - Day1] Web Application with Django (0) | 2021.05.17 |
| [4주차 - Day3] 데이터 씹고 뜯고 맛보고 즐기기 - EDA (0) | 2021.05.14 |
| [4주차 - Day2] 클라우드를 활용한 머신러닝 모델 Serving API 개발 (0) | 2021.05.11 |