본문 바로가기

Backend/Django

2022-02-24::Django Read, Create with sqlite3

Render Data from the database with a model

데이터를 어떻게 받아올 수 있나?

from products.models import Product

products.model 파일에 있는 Product class를 가져온다.

from products.models import Product
obj = Product.objects.get(id=1)
dir(obj)

Class -> objects() -> get() 과정을 통해 해당 되는 데이터를 가져올 수 있다.

obj라는 변수에 해당 데이터를 담았다.

그리고 마지막 줄에 추출한 obj 데이터로 접근 할 수 있는 세부 데이터들을 살펴 볼 수 있다.

물론 Class안의 필드에도 접근이 가능하다.

따라서 여기서 우리는 id=1인 데이터의 멤버변수 (title, description, ..)등을 가져올 수 있다.

코드에서는 context로 obj 전체를 통째로 전달해준다. 'object': obj

 

다음으로 views.py에서 데이터들을 템플릿으로 전달하는 방법을 알아보겠다.

from django.shortcuts import render

def product_detail_view(req):
    obj = Product.objects.get(id=1)
    context = {
	   'object': obj
    }
    return render(req, "product/detail.html", context)

위 함수는 특정 url로 요청이 들어왔을 때 실행된다. 즉 특정 요청에 대한 비즈니스 로직이다.

product_detail_view 함수는 http req 객체를 인자로 받는다. 이 로직에서는 req객체를 특별히 이용하지는 않는다.

 

위 비즈니스 로직은 아래의 순서로 동작한다. 

1. url('/product')로 요청이 들어온다.

2. trydjango/urls.py에서 해당 요청에 맞는 비즈니스 로직을 실행 시킨다.(product_detail_view)

3. Product 스키마의 데이터 중 id가 1인 값을 가져온다. (From DB)

4. 위 데이터를 바탕으로 template에 전달해줄 context를 구성한다.

5. req객체, template 경로, context를 인수로 render()메서드를 호출한다.

 

모델에 따로 id 필드을 지정하지 않아도 자동으로 등록된다.

context는 보통 Dictionary 자료형을 사용한다. { } 사용

 

모델은 스키마인가? Class, MVT 방식

app은 재사용이 가능하다.

하나의 app에 하나의 모델이 존재하고, 그 모델 구현체에 대한 CRUD를 설정한다.

How Django Templates Load with Apps

template는 해당 app 디렉터리의 내부에서 관리해도 되고, 밖에서 따로 templates라는 디렉터리를 만들어 그 안에서 관리해도 된다.

template 탐색 경로는 settings.py에서 따로 관리된다. 또한 기본으로 지정된 많은 경로들이 있다. 그 경로 또한 우선순위가 있다. 나중에 필요하면 검색해서 따로 알아보도록 하자.

Django Model Forms

이번에는 html form 형식을 이용해서 유저가 데이터를 데이터베이스에 저장하는 방법을 알아보겠다.

form을 통한 등록 기능을 추가하고 싶은 app의 디렉터리 내부에 다음과 같은 파일을 만들어준다.

파일명은 forms.py

from django import forms

from .models import Product


class ProductForm(forms.ModelForm):
    class Meta:
        model = Product
        fields = [
            'title',
            'description',
            'price'
        ]

먼저 클래스를 지정해주고 인수로 forms.ModelForm을 지정한다.

그 아래 Meta class를 정의하고 model에는 해당 form과 연결시킬 Model Class를 지정해준다.

fields에는 모델의 필드 중 form에 사용할 것들을 지정 해준다. 

 

방금 만든 form을 이용해 create 비즈니스 로직을 views.py에 추가한다.

from django.shortcuts import render

from .models import Product
from .forms import ProductForm

def product_create_view(req):
    form = ProductForm(req.POST or None)
    if form.is_valid():
        form.save()
        form = ProductForm()

    context = {
        'form': form
    }
    return render(req, "product/product_create.html", context)

ProductForm()을 다시 실행시켜준 이유는 form에 남아 있는 데이터들을 깔끔하게 비워주기 위해서이다.

 

'Backend > Django' 카테고리의 다른 글

2022-03-01::DRF Serialization  (0) 2022.03.02
2022-02-25::Django 29-35  (0) 2022.02.25
2022-02-24::Django Forms  (0) 2022.02.24
2022-02-20::Django models  (0) 2022.02.21
2022-02-20::Django 환경설정  (0) 2022.02.21