참고:
[Web Applicateion]서버 사이드와 클라이언트 사이드,백앤드와 프론트앤드
pip install django로 반드시 장고를 설치하여야한다.
또한 장고의 버전은 2이므로 1을 사용하는 사람들의 경우 서로 많이 차이날 수 있다는 점을 잘 알고 접근하여야 한다.
이제 장고에 대해서 어느정도 알았다.
이 기능만 알아도 장고를 다루고 사용하는데는 큰 무리는 없다.
이제부터는 어찌보면 심화학습일순 있다 그러나 중요하지 않다는 이야기는 더더욱 아니다.
이제는 장고를 더욱 장고 답게, 그리고 편리하게 만드는 방법을 알것이다.
그 첫번쨰 시작이 바로 class based view이다.
지금까지 코드를 잘 생각해보자.
지금까지 view는 funtion으로, 즉 함수로 만들었다. view의 함수 하나하나는 url과 연결되어있다.
그리고 페이지 하나(url 하나)와 연결되어있다고 생각해도 무방하다.
이 방식은 지금까지의 웹 프로그래밍과도 큰 차이가 없을만큼 보편적인 방식중 하나라고 할 수 있다.
크게 문제라고 보기도 힘들다. 그러나 프로젝트가 커지면 이 방식에는 단점이 드러나게 된다.
그러나 이러한 단점은 차차 말하기로 하자. 일단 class based view에 대해서 알아보자.
# views.py
from django.views import View
from django.shortcuts import render
# Create your views here.
class IndexView(View):
def get(self, request, *args, **kwargs):
context = {'parm1': 'hello', 'parm2': 'django'}
return render(request, 'index.html', context=context)
지금까지의 view, 즉 function based view에서는 해당 함수로 넘어와서,
그 함수에서 request.method를 사용해서 현재 함수가 get인지 post인지 확인하고
그에 따라맞춰서 흐름을 제작했다. 그러나 classed base view는 다르다.
내부의 method가 아니라 get함수와 post함수를 써서 애초에 따로 나눌 수 있다.
여기서 내가 만들 view는 View라는 클래스를 상속받아야된다.
View는 django.views의 View클래스를 의미한다.
이제 url에 등록을 해보자. 등록하는 방식은 이때까지와는 살짝 다르지만 크게 다르진 않다.
# urls.py
from django.urls import path
from DjangoApp.views import IndexView
urlpatterns = [
path('', IndexView.as_view(), name='index'),
]
등록할때 이때까지는 함수를 등록했다.
그래서 여기서 url등록시에도 클래스자체를등록할 수는 없다. 그래서 as_view메소드를 호출해주어야한다.
이제 index.html 템플릿을 보도록하자.
{#index.html#}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Index</title>
</head>
<body>
{{ parm1 }}
{{ parm2 }}
</body>
</html>
이 코드가 작동을 하는지는 실행을 해보면 알 수있다.
당장 실행을 해보자.
제대로 실행되는 것을 확인할 수 있다.
이제 실행되는건 알겠고 생각보다 쓰는게 어렵지 않다는 것도 알았다.
여기서 잠깐 class based view와 function based view의 장단점에 대해서 알아보자.
function based view(함수 기반 뷰)
- 실행 로직이 직관적이다.
- 간단한 로직에 사용시 코드의 양이 적다.
- 진입장벽이 매우 낮고 다른 서버사이드언어로 치환하기 쉽다.
- 복잡한 로직에 사용시 코드가 난해해지고 양이 많아진다.
- restful 사용시에는 오히려 코드가 난해해진다.(http method별로 핸들링하기 때문)
class based view(클래스 기반 뷰)
- 복잡한 로직에서도 코드의 직관성이 유지된다.
- 이식성이 좋다.
- restful 사용시에도 http method가 class method와 1대1 대응이라 읽기 쉽다.
- 간단한 로직 사용시의 코드 양이 꽤 되는 편이다.
- 실행 로직이 클래스를 거치기에 직관성이 조금 떨어진다.
- django를 이해해야하며 따라서 진입장벽이 조금 있다.
따라서 가볍게 쓰거나 로직이 적다면 function이 낫고 아니라면 class가 낫다.
그러나 실제로 쓰다보면 클래스기반이 더 적절하다는 느낌을 받는다.
'Programming > Python-Django' 카테고리의 다른 글
[Django-10]login, logout (0) | 2018.02.11 |
---|---|
[Django-08]form과 model연결 (0) | 2018.02.03 |
[Django-07]form만들기 (0) | 2018.02.03 |
[Django-06]model을 templates로 출력하기 (0) | 2018.02.03 |
[Django-05]db와 model 사용하기 (0) | 2018.02.03 |