본문 바로가기
기술정리/Django

Django Class기반 View

by bingual 2022. 10. 10.
반응형

[ Regex ]

<re_path> : 정규표현식을 직접 사용하기 위해 사용함

사용법1 
	: re_path('url주소/<타입:필드>/', views.메서드이름)
예)   
	: path('<int:pk>/', views.post_detail)

사용법2 
	: re_path(r'url주소/(?P<매개변수>정규표현식)', views.메서드이름)
예)   
	: re_path(r'archives/(?P<year>20\d{2})/', views.archives_year)


<Path Converter> : 커스텀 정규표현식 생성/사용

사용법1: 
class 클래스이름:
regex : r'정규표현식'

# url로부터 추출한 문자열을 뷰에 넘겨주기 전에 반환
    def to_python(self, value):
        return int(value)

    # url reverse 시에 호출
    def to_url(self, value):
        return str(value)

register_converter(YearConverter, 'year') : YearConverter 클래스를 year란 이름으로 사용하겠다



[ Root Template ]

<프로젝트명 urls.py>
# DIRS에 설정된 경로에서 root.html를 불러오겠다.
path('', TemplateView.as_view(template_name='root.html'), name='root'),


<settings -> TEMPLATES -> DIRS>
'DIRS': [
            # File System Template Loader
	    # 디렉토리 경로를 지정한뒤 그곳에 html 파일을 만들어야 인식함.
            os.path.join(BASE_DIR, 'askcompany', 'templates'),
        ],

---------------------------------------------


[ RedirectView ]

permanent (defalut : False)
	# True 	: 301 응답 (영구적인 이동) - 검색엔진에 영향
	# False	: 302 응답 (임시 이동) 
	
----------------

[ Attribute ]

url = None
	# URL 문자열
	
pattern_name = None
	# URL Reverse를 수행할 문자열

query_string = False
	# QueryString을 그대로 넘길 것인지 여부
	
----------------

사용법		: path('url주소', RedirectView.as_view(속성,), name='이름'),
예1)		: path('', RedirectView.as_view(url='/instagram/',), name='post_list'),
예2)		: path('', RedirectView.as_view(pattern_name='instagram:post_list',), name='post_list'),

[ DetailView ] 

queryset : 쿼리의 내용을 설정한다.
self.request.user.is_authenticated : 로그인 여부 체크


# 함수를 정의해서 사용한다.
class PostDetailView(DetailView):
    model = Post

# queryset을 이용한 방법
    # queryset = Post.objects.filter(is_public=True)

# get_queryset 메서드를 재정의해서 사용하는 방법
    def get_queryset(self):
        qs = super().get_queryset() # 오버로딩
        if not self.request.user.is_authenticated:  # 로그인 여부
            qs = qs.filter(is_public=True)
        return qs

# 클래스기반 View를 사용하기위해 클래스의 as_view를 호출
post_detail = PostDetailView.as_view()



 



[ ListView ]

[ html & bootstrap]

page
    # 표시할 결과 페이지.

pages_to_show
    # 총 페이지 수
    :default: ``11``

url
    # 앞으로 페이지 매김 및 뒤로 페이지 매김을 위해 탐색할 URL.
    :default: ``None``

size
    # CSS를 통해 페이지 매김의 크기를 제어. 기본 크기는 보통.

    다음 중 하나:

        * ``'small'``
        * ``'large'``
    :default: ``None``

extra
    # 추가 페이지 매개변수.
    :default: ``None``

parameter_name
    # 페이징 URL 매개변수의 이름.
    :default: ``'page'``


예)	:	{% bootstrap_pagination page_obj size="large" %}

---------------------------------------------

[ View.py ]

paginate_by		
	# 보여줄 목록의 개수

예)	:	post_list = ListView.as_view(model=Post, paginate_by=10)