Django 장고 Form, Django model, ORM, MTV

데이터 주기 (form과 input)
웹에서 유저에게 데이터를 입력받는 여러가지 형식을 제공 (버튼, 텍스트 ...)
유저의 데이터를 서버로 전송하는 역할
action
데이터가 전송될 url 지정
지정하지 않을 경우 현재 페이지의 url로 데이터 전송
method
데이터를 전송하는 방식 (HTTP request method)을 지정함
HTML Form은 GET방식 또는 POST방식으로만 전송가능
input
form에서 사용자의 입력을 받기 위해 사용
type속성에 따라 입력 동작 방식이 달라진다. 지정하지 않을경우type=text
https://developer.mozilla.org/ko/ 보고 찾아보면서 공부하기데이터 전송에서 핵심은
name,name으로 서버에 데이터를 전달 → 서버는name을 보고 데이터를 판단
name 속성
form을 제출(submit)하면
name속성에 설정된 값이 서버로 전송된다.서버에서는
name속성을 사용하여 값에 접근 → 즉,name속성이 없다면 서버가 데이터를 받을 수 없다.name속성의 값이 key가 되고, 사용자가 입력한 값이 value가 되어 전송된다.
데이터 받기
서버에서 데이터 받기
클라이언트에서 GET 방식으로 보낸 데이터를 서버에서 받게됨 → 쿼리스트링 방식으로 옴
이러한 데이터를 받는 방식은 사용하는 도구마다 구현방식이 다르다.
data-throw.html
<form action="/data-catch/" method="GET">
action에 데이터를 전송할 곳을 작성해준 후 데이터 입력을 하면

data-catch의 주소로 데이터가 받아와진다.

받아온 데이터를 주소가 아닌 아래쪽으로 받아오는 처리를 해주면 된다.
넘어온 데이터를 처리하려면 데이터를 받아서 (view) —> (context) —> 보여주고 싶다 (template)
즉, view에서 데이터 처리를 해주면 된다.
views.py
def data_catch(request):
message = request.GET.get('message')
return render(request, 'data_catch.html', context)
data-throw에서 입력한 데이터를 message라는 name (→ key)로 서버로 전송할거야 라고
적어둬서 views.py에서 message에 있는 값을 꺼내 라고 작성해주게 된다.
data-throw.html
<form action="" method="">
<label for="my-data">데이터 입력</label>
<input type="text" id="message" name="message" />
<button type="submit">전송</button>
</form>
값을 꺼냈으면 context에 message를 담아서 return render에 context를 전송해주면 된다.
views.py
def data_catch(request):
message = request.GET.get('message')
context = {'message':message}
return render(request, 'data_catch.html', context)
template에서는 전송받은 데이터를 보여주면 된다.
date-catch.html
{% extends 'base.html' %}
{% block content %}
<h1>data catch</h1>
<h2>current data</h2>
<h3>current data is ? {{ message }}</h3>
{% endblock content %}

데이터를 받아 화면에 띄워주는 과정

Django Model
Model
저장할 데이터에 대한 필드와 동작들을 포함한 데이터베이스 구조 (layout)
Django는 Model을 이용해서 데이터를 조작한다.
일반적으로 하나의 Model은 하나의 데이터베이스 테이블을 의미
Django model
models.Model을 상속받아서 사용하고자 하는 데이터 스키마를 정의한.모든 모델은
models.Model의 서브 클래스로 표현한다.
models.py
장고의 모델은 class로 정의한다.
class class이름을 적고 models.Model을 상속
마이그레이션 (Migration)
데이터베이스에 변경할 내용들을 적어놓은 것. 모델의 변경사항을 가지고 만들어진다.
현재 Python으로 Model 코드는 작성했지만 데이터베이스에는 반영이 안된 상태
⇒ Django는 마이그레이션(migration)을 만들고 이 단위로 데이터베이스에 변경사항을 반영하게
된다.
마이그레이션 생성
model에 생긴 변경사항을 마이그레이션으로 만드는 과정
python manage.py makemigrations
반영되지 않은 마이그레이션 반영
마이그레이션을 실제로 데이터에 반영해서 동기화 하는 과정
python manage.py migrate
Django ORM
ORM (Object-Relational-Mapping)
파이썬으로 데이터베이스를 조작할 수 있게 해준다.
객체 지향 언어에서는 클래스를 이용한 객체로 데이터와 기능을 캡슐화해서 다루고
데이터베이스는 테이블과 행으로 데이터를 저장하고 관리하는데 이 두가지 사이의 개념적인 간극을 줄인것
Database API
Django ORM으로 Database API를 사용해서 데이터베이스를 조작하는 것
Manager
우리가 모델 클래스를 생성하면 Django는 자동적으로 CRUD 할 수 있는 Database API를 제공한다
우리는 Manager를 이용해서 Django ORM의 Queryset API를 사용하게 될 것
- Queryset == ORM을 사용해서 데이터베이스로부터 전달받은 객체 (QuerySet → ORM을 사용해서 db를 왔다갔다 하는 객체)
이 매니저의 기본(default)이름은
objects

MTV를 사용해서 데이터 조회하는 과정
view에서 model에 접근해 모든 아티클을 가져온다. → Article.objects.all()
view에서 가져온 아티클을 template으로 넘긴다. → context
template에서 넘어온 context를 보여준다.
view에서 템플릿을 렌더링해서 티런한다.





