Django 사용자 정의 라우팅 변환기 구현

사용자 정의 경로 변환기


때때로 위에 내장된 URL 변환기는 우리의 수요를 만족시키지 못하기 때문에django는 우리에게 인터페이스를 제공하여 우리로 하여금 자신의 URL 변환기를 정의할 수 있게 한다

django 내장된 경로 변환기 원본 분석


루트 변환기를 사용자 정의하기 전에,django에 내장된 루트 변환기가 어떻게 쓰였는지, 원본 경로fromdjango를 살펴보겠습니다.urls

import converters

class IntConverter:
    regex = '[0-9]+'

    def to_python(self, value):
        return int(value)

    def to_url(self, value):
        return str(value)


class StringConverter:
    regex = '[^/]+'

    def to_python(self, value):
        return value

    def to_url(self, value):
        return value


class UUIDConverter:
    regex = '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}'

    def to_python(self, value):
        return uuid.UUID(value)

    def to_url(self, value):
        return str(value)


class SlugConverter(StringConverter):
    regex = '[-a-zA-Z0-9_]+'


class PathConverter(StringConverter):
    regex = '.+'


DEFAULT_CONVERTERS = {
    'int': IntConverter(),
    'path': PathConverter(),
    'slug': SlugConverter(),
    'str': StringConverter(),
    'uuid': UUIDConverter(),
}


REGISTERED_CONVERTERS = {}


def register_converter(converter, type_name):
    REGISTERED_CONVERTERS[type_name] = converter()
    get_converters.cache_clear()
위에서 우리가 매우 분석할 수 있듯이 django에 내장된 경로 변환기는 먼저 하나의 클래스를 정의했고 클래스에서 하나의 클래스 속성regex를 정규 표현식의 값으로 정의한 다음에 두 가지 방법을 정의했다. to_python 및 to_url, 마지막으로register_converter 함수, 경로 변환기를django에 등록합니다
우리는 여기서 그에게 5단계로 나누어 주었다.
1. 컨버터를 만듭니다.py, 파일에 클래스를 정의합니다.
2. 클래스에서 하나의 속성regex를 정의합니다. 이 속성은 url 변환기 규칙을 저장하는 정규 표현식입니다.
3. 실현 to_python(self,value) 방법입니다. 이 방법은 URL의 값을 변환해서 보기 함수에 전달합니다.
4. 실현 to_url(self,value) 방법입니다. 이 방법은 url반전을 할 때 들어오는 매개 변수를 변환하여 정확한 url로 연결하는 것입니다.
5. 정의된 변환기를 django에 등록합니다.

작은 사례


다음은 네 자리 숫자의 경로가 일치하는 변환기를 정의합니다
새 컨버터를 만듭니다.py 파일, 코드는 다음과 같습니다.

class FourDigitYearConverter:
    #  
    regex = '[0-9]{4}'

    def to_python(self, value):
        return value

    def to_url(self, value):
        return '%04d' % value

urls에 있습니다.py 파일에 사용자 정의 변환기 등록

from django.urls import path,  converters
#  
register_converter(converters.FourDigitYearConverter, 'yyyy')  # yyyy 
urlpatterns = [
  path('articles/<yyyy:year>', views.articles_yyyy),
]
이렇게 하면 우리는 4자리 숫자의 URL 주소와 일치할 수 있다
이 Django 사용자 정의 루트 변환기 구현에 관한 글은 여기까지 소개되었습니다. 더 많은 Django 루트 변환기 내용은 이전의 글을 검색하거나 아래의 관련 글을 계속 훑어보십시오. 앞으로 많은 응원 부탁드립니다!

좋은 웹페이지 즐겨찾기