Django 의 핵심 기능

김용녀·2022년 7월 13일
1

파이썬 장고

목록 보기
1/2

장고의 핵심 기능들을 정리해보자.

우선, 지난 포스트에서 Django의 장점이라고 얘기했던 sql문없이 DB에 데이터를 저장하고, 꺼낼수 있는 기능이다.

원래라면 DB에서 Create, Select 등의 DDL,DML을 이용하여 번거로운 과정이 필요하지만, Django는 그저 Django 환경 내에서도 데이터를 처리할수있다

Django Template Language (DTL)

조건,반복문

{% 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 %} 등의 반복,조건문, 변수 그리고 다양한 필터 기능을 이용할 수 있다.

template 상속

<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 %}을 써서 부모와 다르게 정의하면 오버라이딩 된다.

Form 그리고 View의 처리

폼을 처리하는데 뷰는 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만 썼지만, 이제 로직 규모를 키울수록 클래스를 통한 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

로그남기기

메세지 심각성에 따라 로그레벨을 갖는다.
로거는 로깅 시스템의 시작점이기때문에 로그와 혼동하면 안된다.

profile
어서오세요

0개의 댓글