2017-03-31 3 views
1

나는 장고를 처음 사용하고 있으며 클래스 뷰를 이해하려고 노력 중이다. (주) urls.py에서클래스 httpresponse 결과 405 - django

내가 가진 :

웹 애플리케이션 폴더에
from django.conf.urls import url, include 
from django.contrib import admin 

urlpatterns = [ 
    url(r'^admin/', admin.site.urls), 
    url(r'^', include('webapp.urls')), 
] 

내가 가진 :

urls.py (웹 애플리케이션) :

from django.conf.urls import url 
from webapp.views import Firstapp 

urlpatterns = [ 
    url(r'^whatever$', Firstapp.as_view()), 

] 

views.py를 (웹 애플리케이션을) :

from django.shortcuts import render 
from django.views import View 
from django.http import HttpResponse 

class Firstapp(View): 

    def something(self): 
     return HttpResponse('Yes it works!') 

내가 말했듯이, 나는 클래스 뷰를 반환하는 이유를 이해하도록 도와 주시면 감사하겠습니다. 고맙습니다. CMD는 0 개의 문제를 반환합니다.

답변

1

View을 서브 클래 싱하기 때문에 정의한 유일한 방법은 something입니다.

View은 유효한 각 HTTP 동사에 대해 메소드를 정의해야합니다. (GET, POST, HEAD 등). Firstapp에는 그러한 메소드가 없기 때문에 View.dispatch은 http 상태 405 (메소드가 허용되지 않음) 인 응답을 리턴합니다.

dispatch(request, *args, **kwargs)

뷰의 뷰 파트 - 요청 인수 플러스 인수를 허용하고, HTTP 응답을 반환 방법.

기본 구현은 HTTP 메서드를 검사하고 HTTP 메서드와 일치하는 메서드에 위임하려고 시도합니다. GET은 get(), post() 등 POST로 위임됩니다.

기본적으로 HEAD 요청은 get()에 위임됩니다. GET과 다른 방법으로 HEAD 요청을 처리해야하는 경우 head() 메서드를 재정의 할 수 있습니다. 예제는 다른 HTTP 메소드 지원을 참조하십시오.

는,이 문제를 해결하여 something 방법을 변경하려면 :

def get(self, request): 
    return HttpResponse('Yes it works!') 
+0

안녕하세요, 네, 그것은 작동합니다. 고맙습니다. –