http 요청 처리 프로세스에 대한 Django 클래스 뷰(class base view)
3053 단어 Django
함수 보기에서 http 요청을 처리할 때 리퀘스트를 직접 호출할 수 있습니다.method 속성은 http 요청의 유형을 판단합니다. 예를 들어:
from django.http import HttpResponse
def my_view(request):
if request.method == 'GET':
#
return HttpResponse('result')
클래스 보기를 사용할 때 http 요청 처리를 실현할 때 모든 요청을 클래스로 작성할 수 있습니다. 기본 클래스 뷰에서 계승하고 get () 방법을 작성하면 HTTP에서 get () 요청을 할 때 사용자 정의 get () 방법과 자동으로 일치합니다.
from django.http import HttpResponse
from django.views import View
class MyView(View):
def get(self, request):
#
return HttpResponse('result')
우선view에서.generic.base.py에서 정의된 http 요청 형식을 찾을 수 있습니다:
http_method_names = ['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace']
HTTP가 요청을 시작하면 클래스 보기를 통해 asview () 방법 전송 요청 형식, asview () 는 위에서 정의한 방법에 따라 반복해서 찾을 수 있습니다.구체적으로 assetup () 과 디스패치 () 방법을 각각 호출합니다. 디스패치 () 방법은python 클래스의 내장 함수 getattr () 방법으로 현재 확장 클래스에서 HTTP 요청과 일치하는 클래스가 있는지 찾습니다. 예를 들어 get () 처리 방법입니다.상응하는 방법을 찾으면 asview () 는 이 사용자 정의 방법의 결과를 되돌려줍니다:
def view(request, *args, **kwargs):
self = cls(**initkwargs)
if hasattr(self, 'get') and not hasattr(self, 'head'):
self.head = self.get
self.setup(request, *args, **kwargs)
if not hasattr(self, 'request'):
raise AttributeError(
"%s instance has no 'request' attribute. Did you override "
"setup() and forget to call super()?" % cls.__name__
)
return self.dispatch(request, *args, **kwargs)
view.view_class = cls
view.view_initkwargs = initkwargs
# take name and docstring from class
update_wrapper(view, cls, updated=())
def setup(self, request, *args, **kwargs):
"""Initialize attributes shared by all view methods."""
self.request = request
self.args = args
self.kwargs = kwargs
def dispatch(self, request, *args, **kwargs):
# Try to dispatch to the right method; if a method doesn't exist,
# defer to the error handler. Also defer to the error handler if the
# request method isn't on the approved list.
if request.method.lower() in self.http_method_names:
handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
else:
handler = self.http_method_not_allowed
return handler(request, *args, **kwargs)
이렇게 하면 Django 개발 과정에서 클래스 보기, 예를 들어 View,ListView,DetailView,TemplateView에 사용할 때 클래스 방법을 작성하는 방식으로 get,post 등 요청 처리를 사용자 정의할 수 있고 후속 개발에서 이러한 방법을 유연하게 다시 써서 수요를 달성할 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Django 라우팅 계층 URLconf 작용 및 원리 해석URL 구성(URLconf)은 Django가 지원하는 웹 사이트의 디렉토리와 같습니다.그것의 본질은 URL과 이 URL을 호출할 보기 함수 사이의 맵표입니다. 위의 예제에서는 URL의 값을 캡처하고 위치 매개 변수로...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.