Django: (05) 클래스 뷰, 장식기 및 중간부품
1. 클래스 보기의 정의와 사용
Django에서는 클래스를 통해 클래스 뷰라는 뷰를 정의할 수도 있습니다.
클래스 보기 정의: 클래스를 정의합니다. Django가 제공하는
View
클래스를 계승해야 합니다.from django.views.generic import View
class TestView(View):
def get(self, request):
"""get """
return render(request, 'index.html')
def post(self, request):
"""post """
#
return HttpResponse(' ')
루트 설정: 클래스 보기를 호출하는
as_view()
방법 urlpatterns = [
...
url(r'^Test$', views.PostView.as_view()),
]
as_view()의 역할은 서로 다른 요청 방식에 따라 다른 요청 방법을 호출하는 것입니다. 자세한 내용은 asview () 방법 원본 및 내부에서 호출된 디스패치 ()
2. 클래스 보기 계승 확장 클래스
정의된 확장된 부모 클래스 이름은 보통 Mixin으로 끝납니다. 클래스 보기는 다중 계승을 통해 그들의 방법을 계승할 수 있습니다.
ListModelMixin
조회 다중 데이터(리스트 데이터)CreateModelMixin
새로운 데이터RetrieveModelMixin
데이터 조회UpdateModelMixin
데이터 수정DestroyModelMixin
데이터 삭제class DepartmentView(CreateModelMixin, ListModelMixin, View):
"""
"""
def get(self, request):
# ListModelMixin list
return self.list(request)
def post(self, request):
# CreateModelMixin create
return self.create(request)
class EmployeeView(CreateModelMixin, View):
"""
CreateModelMixin
"""
def post(self, request):
# ListModelMixin list
return self.create(request)
3. 보기에 장식기 추가
장식기: 기존 함수를 바꾸는 전제에서 함수 호출 전이나 이후에 추가 조작을 실행합니다
1、장식기 하나 준비
def check_ip(view_fun):
""" : ip """
def wrapper(request, *args, **kwargs):
# :
# ip
IP = request.META.get('REMOTE_ADDR')
if IP in ['192.168.210.160']:
return HttpResponse('IP ')
return view_fun(request, *args, **kwargs)
return wrapper
2、우리 위의 장식기를 직접 사용할 수 없습니다(self 파라미터 부족)
method 필요decorator 장식기, 함수 장식기는 첫 번째self 파라미터를 보충하여 클래스에 적용할 수 있도록 합니다.
@method_decorator(check_ip)
3. 클래스 보기의 특정한 방법에 장식기를 추가
class PostView(View):
@method_decorator(check_ip)
def post(self, request):
return HttpResponse(' ')
4. 클래스 보기의 모든 방법에 장식기를 적용한다.
디스패치 방법
@method_decorator(check_ip)
을 추가하면 클래스 보기에 모든 방법에 장식기를 적용할 수 있습니다.class PostView(View):
@method_decorator(check_ip)
def dispatch(self, request, *args, **kwargs):
return super().dispatch(request, *args, **kwargs)
5. 다른 방법:
클래스에 장식기를 추가하고 어떤 방법으로 장식할지 지정합니다:
@method_decorator( , name=' ')
@method_decorator(check_ip, name='get')
class PostView(View):
def get(self, request):
return render(request, 'index.html')
def post(self, request):
return HttpResponse(' ')
4. Django 중간부품
보기 함수 호출 전이나 이후에 추가 작업을 수행하고 Django의 입력이나 출력을 전역적으로 수정하는 경량급 플러그인 시스템
방법
역할
반환값
__init__(self, get_response=None)
서버 시작(재부팅) 시 한 번 실행
없음
process_request(self, request)
보기가 실행되기 전에 호출
되돌아오기
None
: 보기를 실행합니다.반환HttpResponse
: 뷰를 다시 실행하지 않습니다.process_response(self, request, response)
보기가 실행된 후에 호출
HttpResponse 객체로 돌아가야 합니다.
1. 중간부품 정의
Django의
MiddlewareMixin
확장 클래스를 상속하여 실현class MyMiddleware(MiddlewareMixin):
def process_request(self, request):
print('before ')
def process_response(self, request, response):
print('after ')
return response #
process_request (): None이나response 대상을 되돌려줍니다.response 대상을 되돌려주면 보기 함수는 다시 실행되지 않습니다
2. settings 파일에서 설정
MIDDLEWARE = [
'middlewares.MyMiddleware', #
]
3. 다중 중간부품의 실행 순서
posted @
2018-11-18 17:40 밤을 들고 읽기(
...) 설명(
...) 모음 편집
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.