[Django] 장고 Views를 활용한 HTTP 요청 처리#1_다양한 응답의 함수 기반 뷰

아직·2022년 7월 8일
0
post-thumbnail

1)

FBV는 호출 가능한 객체 그 자체로서 장고 뷰의 기본이고 CBV는 클래스.as_view()를 통해 호출 가능한 객체를 '생성해서 리턴한다.'

2)

urlpatterns = [
    path('', views.post_list),
    path('<int:pk>', views.post_detail),
    # re_path(r'(?P<pk>\d+)/$', views.post_detail),
]

path(-pk-)와 re_path(-pk-)의 결과는 같다. re_path에서는 모든 인자가 str 타입으로 전달되는 반면, path에서는 매핑된, 그 자체가 하나의 작은 클래스인 정규 표현식, converter의 to_python 함수에 의해 '변환된 값'이 인자로 전달된다.

3)

앞에서 middeleware를 뷰 전/후로 호출되는 함수 정도로 해석했는데, 사실 뷰를 감싸고 있는 여러 겹의 검열 장치 기능도 하고 있다고 한다. 예를 들어서 request가 목표로 하는 view로 접근하기 전에 middleware가 기대하는 값이 들어와야 하고, http response가 돌아 나올때도 middleware가 기대되는 값이 나와야 한다.

4)

def post_list(request):
    qs = Post.objects.all()
    q = request.GET.get('q', '')
    if q:
        qs = qs.filter(message__icontains = q)
    # instagram/templates/instagram/post_list.html
    return render(request, 'instagram/post_list.html', {
        'post_list' : qs,
        'q' : q,
    })

쿼리셋에서 특정한 쿼리를 지정해서 필터링하는 부분을 제외하고는

post_list = ListView.as_view(model = Post)

클래스 뷰로 간단하게 나타낼 수 있다.

0개의 댓글