1. Model로 DB 구성하기
- remind
- ORM - 객체 단위로 데이터베이스를 다룰수 있게 도와준다.
- homepage/models.py
- 클래스 단위로 만든다.
- 클래스의 속성이 실제 데이터베이스에서 칼럼이 된다.
- 문자열 : CharField
- 숫자: IntegerField, SmallIntegerField ...
- 논리형: BooleanField
- 시간/날짜: DateTimeField
from django.db import models
# Create your models here.
class Coffee(models.Model):
name = models.CharField(default="", null=False, max_length=30)
price = models.IntegerField(default=0)
is_ice = models.BooleanField(default=False)
- admin.py
- 여기에 만든 모델을 등록해주면 내가 만든 모델을 관리자페이지에서 관리할 수 있다.
from django.contrib import admin
from .models import Coffee
# Register your models here.
admin.site.register(Coffee)
- 데이터베이스에 변동사항이 생기면 settings.py에 반영해줘야 한다.
- python manage.py makemigrations <내가 만든앱>
- python manage.py migrate
- Coffe 열람할때 이름으로 편하게 확인할 수 있도록 설정해주기.
models.py
from django.db import models
# Create your models here.
class Coffee(models.Model):
def __str__(self):
return self.name
name = models.CharField(default="", null=False, max_length=30)
price = models.IntegerField(default=0)
is_ice = models.BooleanField(default=False)
2. Template에서 Model 확인하기
- models.py에 선언한 Coffee를 template에 전달해보기
- homepage/views.py
from django.shortcuts import render, HttpResponse, render
from .models import Coffee
# Create your views here.
def index(request):
name = 'TEST'
test = [1, 2, 3, 4, 5]
return render(request, 'index.html', {
"my_name": name,
'my_list': test,
})
def coffee_view(request):
coffee_all = Coffee.objects.all()
return render(request, 'coffee.html', {"coffee_list": coffee_all})
- homepage/template에 coffee.html 만들기
<!DOCTYPE html>
<html>
<head>
<title>Coffee List</title>
</head>
<body>
<h1>My Coffee List</h1>
<p>{{coffee_list}}</p>
</body>
</html>
- webproj/urls.py
urlpatterns = [
path('', index),
path('coffee/', coffee_view),
path('admin/', admin.site.urls),
]
- coffee.html 수정
<!DOCTYPE html>
<html>
<head>
<title>Coffee List</title>
</head>
<body>
<h1>My Coffee List</h1>
{% for coffee in coffee_list %}
<ul>
<li>{{coffee.name}} : {{coffee.price}}</li>
</ul>
{% endfor %}
</body>
</html>
3. Form으로 Template에서 Model 수정하기
- homepage에 forms.py 만들기
from django import forms
from .models import Coffee
class CoffeeForm(forms.ModelForm):
class Meta:
model = Coffee
fields = ("name", "price", "is_ice")
- homepage/views.py
from django.shortcuts import render, HttpResponse, render
from .models import Coffee
from .forms import CoffeeForm
# Create your views here.
def index(request):
name = 'TEST'
test = [1, 2, 3, 4, 5]
return render(request, 'index.html', {
"my_name": name,
'my_list': test,
})
def coffee_view(request):
coffee_all = Coffee.objects.all()
form = CoffeeForm()
return render(request, 'coffee.html', {
"coffee_list": coffee_all,
"coffee_form": form})
- coffee.html
<!DOCTYPE html>
<html>
<head>
<title>Coffee List</title>
</head>
<body>
<h1>My Coffee List</h1>
{% for coffee in coffee_list %}
<ul>
<li>{{coffee.name}} : {{coffee.price}}</li>
</ul>
{% endfor %}
<form method="POST">
{{coffee_form.as_p}}
<button type="submit">Save</button>
</form>
</body>
</html>
- 장고에서 form을 통해 등록을 수행할때 CSRF 토큰을 같이 삽입해 줘야 한다.(보안관련)
<!DOCTYPE html>
<html>
<head>
<title>Coffee List</title>
</head>
<body>
<h1>My Coffee List</h1>
{% for coffee in coffee_list %}
<ul>
<li>{{coffee.name}} : {{coffee.price}}</li>
</ul>
{% endfor %}
<form method="POST">
{% csrf_token %}
{{coffee_form.as_p}}
<button type="submit">Save</button>
</form>
</body>
</html>
- 그러나 아직 DB에 반영해주는 내용은 있지 않으므로 아무 변화가 나타나지 않는다.
- views.py
def coffee_view(request):
coffee_all = Coffee.objects.all()
# 만약 request가 POST라면:
# POST를 바탕으로 Form을 완성하고
# Form이 유효하면 -> 저장
if reqest.method == 'POST':
form = CoffeeForm(request.POST)
if form.is_valid():
form.save()
form = CoffeeForm()
return render(request, 'coffee.html', {
"coffee_list": coffee_all,
"coffee_form": form})
'프로그래머스 AI 데브코스 5기 > CS' 카테고리의 다른 글
Django 시작하기 (0) | 2023.04.11 |
---|---|
AWS - RDS 기초 (0) | 2023.04.10 |
AWS EC2 실습 (0) | 2023.04.10 |
AWS 서비스들 (1) | 2023.04.10 |
클라우드 서비스 개요 (0) | 2023.04.09 |