장고의 핵심 기능들을 정리해보자.
원래라면 DB에서 Create, Select 등의 DDL,DML을 이용하여 번거로운 과정이 필요하지만, Django는 그저 Django 환경 내에서도 데이터를 처리할수있다
조건,반복문
{% if latest_question_list %}
<ul>
{% for question in latest_question_list %}
<li><a href="/polls/{{ question.id }}/">{{ question.question_text }}</a></li>
{% endfor %}
</ul>
{% else %}
<p>No polls are available.</p>
{% endif %}
template환경에서 {{ variable }}, {% if %} 등의 반복,조건문, 변수 그리고 다양한 필터 기능을 이용할 수 있다.
<head>
<link rel ="stylesheet" href="style.css"/>
<title>{% block title %}My amazing site{% endblock %}</title>
</head>
해당 부모 코드에서 {%block %} 과 {%end block%} 이용하면 이 사이에 있는 내용은 상속(오버라이딩) 가능하다.
태그를 채울 필요없이 그냥 비워둔다면 알아서 부모코드가 상속되어 쓰이고,
{$ block title %}My amazing blog{% end block %}
이 처럼 {% block %}을 써서 부모와 다르게 정의하면 오버라이딩 된다.
폼을 처리하는데 뷰는 2개가 필요하다. 하나는 form 자체를 보여주는 뷰와, 다른 하나는 제출된 폼을 처리하는 뷰다. 이 두개 역시 통합하여 처리할 수 있다.
보통 전자의 빈폼을 작성하는 경우, GET방식을 이용해 form 자체를 보여주고
후자는 POST를 통해 Data가 담긴채 들어온다.
def get_name(request):
#Post방식이면, 데이터가 담긴 제출 폼으로 간주
if request.method == 'POST':
#request에 담긴 데이터로 클래스 폼 생성
form = NameForm(request.POST)
#폼에 담긴 데이터 유효성검사
if form.is_valid():
#폼 데이터가 유효하면, 데이터는 cleaned_data로 복사됩니다.
new_name = form.cleaned_data['name']
#로직에 따라 추가적인 처리
#새로운 URL로 Redirection
return HttpResponseRedirect('/thanks/')
#POST 방식이 아니면(GET요청임),
#빈 폼을 사용자에게 보여줍니다
else:
form = NameForm()
return render(request, 'name.html', {'form':form})
세요
이전 예제에서는 함수형 view만 썼지만, 이제 로직 규모를 키울수록 클래스를 통한 View 작성이 필요하다.
urlpatterns =[
path('aobut/'.MyView.as_view()),]
urls에서 메서드 view와 다르게 XX.as_view()를 이용하여 호출해준다
1.GET,POST등 HTTP메서드 처리 시 코드가 간결해짐.
2.다중 상속기능 ,제네릭 뷰 및 믹스 클래스 사용
첫번째 장점은 함수형 view와 클래스형 view비교를 통해 알아보자
def mv_view(request):
if request.method=='GET':
#뷰 로직 작성
return HttpResponse('result')
class MyView(View):
def get(self,request):
#뷰 로직작성
return HttpResponse('result')
if문으로 직접 비교해야 하는 함수형 view대신
클래스형 view는 클래스내에 HTTP 메서드를 함수로(소문자)작성하면 된다.
두번째 장점은 제네릭뷰 를 상속받아 클래스형 뷰를 작성해보자.
fromdjango.urls import path
from some_app.views import AboutView
urlpatterns=[
path('about/',AboutView.as_view()),
]
------------
from django.views.generic import TemplateView
class AboutView(TemplateView):
template_name = "about.html"
AboutView 클래스는 as_view를 통해 실행되었고, TemplateView라는 genericVIew를 상속 받아 사용하고있다. 이걸 더 요약하면,
fromdjango.urls import path
from django.views.generic import TemplateView
urlpatterns = [
path('about/', TemplateView.as_view(template_name="abput.html")),]
상당히 간단하게 만들 수 있다. 여기서 template_name이 TemplateView 클래스에 정의된 속성이기에 오버라이딩해서 사용하는것이다.
이 외 장고의 Generic view list
메세지 심각성에 따라 로그레벨을 갖는다.
로거는 로깅 시스템의 시작점이기때문에 로그와 혼동하면 안된다.