(4-4) Django (2)
Django
데이터베이스
- 단순히 데이터를 저장하는 창고의 개념이 아닌,
데이터를 사용하기 쉽게 정렬해두어서 유저가 정보를 참조하고 싶을때
쉽게 바로 사용할 수 있게 해주는 시스템 - 대표적으로 RDB(관계형 데이터베이스)가 있음
- SQL을 사용하여 데이터베이스 관리
장고에서는 SQL을 사용하지 않고 데이터베이스와 상호작용할 수 있는 기법이 존재
👇
ORM
객체 관계 매핑 (Object-relational mapping; ORM)은 데이터베이스와 객체 지향 프로그래밍 언어 간의 호환되지 않는 데이터를 변환하는 프로그래밍 기법
👉 장고에는 ORM이 내장되어 있음
Model
-
models.py
-
class <class_name>(models.Model):
from django.db import models class Coffee(models.Model): # Field 1 # Field 2 # ...
-
클래스명은 데이터베이스 테이블명이다.
-
각 필드(속성)는 데이터베이스 테이블의 컬럼이다.
-
**models
의 필드 타입**
- 문자열 : CharField
- 숫자 : IntegerField, SmallIntegerField, ...
- 논리형 : BooleanField
- 시간/날짜 : DataTimeField
- ...
👉 각 필드에 옵션을 인자로 주어 기본사항이나 제약사항을 추가할 수 있음
-
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 관리하기
-
admin.py
-
장고가 기본적으로 제공하는 관리자 App
-
(이전 내용에서) superuser 계정을 이용하여 접근할 수 있었음
from django.contrib import admin from .models import Coffee admin.site.register(Coffee)
👉 admin 페이지에서 model들을 관리할 수 있음
admin 페이지 접속전에 마이그레이션 진행!
# 변경사항 확인 python manage.py makemigrations # 변경사항 적용 python manage.py migrate
-
Coffee object로 표시되어 보기 불편함
-
→ admin의 각 객체의 표시 내용은
models.py
에서 str 메소드로 지정 가능 -
models.py
class Coffee(models.Model): name = models.CharField(default="", max_length=30) price = models.IntegerField(default=0) is_ice = models.BooleanField(default=False) def __str__(self): return self.name
-
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): 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})
Author And Source
이 문제에 관하여((4-4) Django (2)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@leeyongjoo/4-4-Django-2저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)