본문 바로가기
Python/Django

[Django] View 단순화 및 알아두면 좋을 내용 정리

by Lee David 2022. 8. 8.
반응형
1. 단순화

기존에 python의 기본 메서드 형태로 urlpatterns에 등록된 메서드를 만드는 방법도 있지만 해당 메서드보다 더 기능이 많은 class 기반의 Template 메서드를 정의 하는 방법을 정리해 보았습니다.

Template 단순화 하기

# 함수 형태 1
def index(request: HttpRequest) -> HttpResponse:
    return render(request, "page/index.html")

# class 형태 - TemplateView
index = TemplateView.as_view(template_name="page/index.html")

# --------------------------------------------------------------------

# 함수 형태 2
def list(request: HttpRequest) -> HttpResponse:
    qs = Post.objects.all()
    return render(request, "page/list.html", {
        "list": qs
    })

# class 형태 - ListView
list = ListView.as_view(model=Post)

GET, POST의 경우

# 함수 형태의 view
def post(request):
    if request.method = "POST":
        form = ...
    else:
        form = ...
    return render(request, "page/post.html", {
        "form": form
    })

# class 형태의 view
# UpdateView도 동일하게 사용 가능
post = CreateView.as_view(
    model = Post,
    form_class = PostForm,
)
2. QueryDict, MultiValueDict

query string으로 요청온 데이터에 대해서 중복된 key 값을 허용/불허 하는 설정 메서드 입니다.

class HttpRequest:
    def __init__(self):
        self.GET = QueryDict(mutable=True) # 중복 허용 X
        self.POST = QueryDict(mutable=True) # 중복 허용 X
        self.FILES = MultiValueDict() # 중복 허용 O

만약 test라는 key 값으로 여러개의 다른 value를 넘기고 싶다면 MultiValueDict 메서드로 적용하면 쉽게 처리가 가능합니다.

 

 

 

반응형