Django 경로 배포

머리말:

우리는 이미 Django의 기본을 배웠습니다. 오늘 우리가 배울 내용은 라우팅 배포입니다.

경로 배포는 웹 프레임워크의 핵심 개념으로, 다양한 URL 요청을 해당 처리 기능(뷰)에 매핑하는 프로세스를 나타냅니다. Django와 같은 웹 프레임워크에서는 urls.pyURL 구성(일반적으로 파일에 정의됨)을 통해 경로 배포가 이루어집니다.

1. 경로분배란 무엇인가요?

  1. URL 패턴 정의 : Django에서는 일반적으로 일련의 URL 패턴을 정의하여 경로 배포를 수행합니다. 이러한 패턴은 URL의 구조와 해당 URL에 액세스할 때 호출해야 하는 보기 함수를 지정합니다.

  2. 뷰에 매핑 : 각 URL 패턴은 뷰 함수 또는 클래스와 연결됩니다. 요청된 URL이 패턴과 일치하면 Django는 해당 URL과 연결된 보기 함수를 호출하여 요청을 처리합니다.

  3. 요청 배포 : 경로 배포의 목적은 사용자의 요청을 올바른 보기 기능으로 배포하는 것입니다. 이 프로세스는 동적이며 요청된 URL을 기반으로 결정됩니다.

  4. URL 구성 : 경로 배포는 프로젝트의 URL 구조를 구성하여 명확하고 쉽게 유지 관리할 수 있도록 도와줍니다. URL을 뷰에 매핑함으로써 개발자는 논리적으로 명확한 웹 애플리케이션을 구축할 수 있습니다.

2. Django에서의 경로 배포

Django에서는 다음 단계를 통해 경로 배포가 이루어집니다.

  1. 루트 URL 구성 : 프로젝트의 루트 디렉터리에는 일반적으로 urls.py프로젝트의 기본 라우팅 구성이 포함된 파일이 있습니다.

  2. 애플리케이션 라우팅 포함 : 루트 파일에서 기능을 사용하여 요청을 다른 애플리케이션에 배포 urls.py할 수 있습니다. include()이를 통해 각 애플리케이션은 자체 라우팅 구성을 가질 수 있어 프로젝트 구조가 더욱 모듈화됩니다.

  3. 애플리케이션 URL 구성urls.py : 각 애플리케이션에는 애플리케이션에 대한 라우팅 규칙을 정의하는 자체 파일이 있을 수 있습니다 .

  4. 정규식 및 경로 표현식 : Django에서는 정규식( re_path()함수를 통해) 또는 경로 표현식(함수를 통해 )을 사용하여 path()URL 패턴을 정의 할 수 있습니다.

  5. 명명된 경로 : 경로는 템플릿과 보기에서 쉽게 참조할 수 있도록 이름을 지정할 수 있습니다.

  6. 리디렉션 : 경로 배포를 사용하여 URL 리디렉션을 구현할 수도 있습니다.

2.1 애플리케이션 수준 라우팅 구성

각 Django 애플리케이션에는 urls.py애플리케이션의 라우팅 구성을 정의하는 데 사용되는 파일이 있을 수 있습니다.

# UrlApp/urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('index/', views.index),
]

이 예에서는 보기를 정의하는 UrlApp애플리케이션의 이름과 views해당 애플리케이션의 모듈입니다. urlpatterns애플리케이션에 대한 모든 라우팅 규칙을 포함하는 목록입니다. 각 라우팅 규칙은 path()URL 패턴과 보기 기능을 허용하는 기능을 사용하여 정의됩니다.

2.2 프로젝트 경로 배분

프로젝트의 루트 urls.py파일에서 요청을 다른 애플리케이션에 배포할 수 있습니다. 이는 함수를 사용하여 include()달성됩니다 .

# 项目的根目录 urls.py
from django.urls import path, include

urlpatterns = [
    path('urlapp/', include('UrlApp.urls')),
    path('urlapp2/', include('UrlApp2.urls')),
]

여기의 기능은 include()다른 URL 구성 모듈을 포함하는 데 사용됩니다. Django는 요청을 처리할 때 루트 urls.py에 있는 목록 을 봅니다 urlpatterns. 일치하는 경로가 발견되면 지정된 애플리케이션 라우팅 구성에 요청을 추가로 배포합니다.

  • path('urlapp/', include('UrlApp.urls')): 이 코드 줄은 사용자가 액세스하면 Django는 애플리케이션에서 파일을 /urlapp/찾아 요청을 추가로 처리하는 데 사용합니다 .UrlAppurls.pyurlpatterns

  • path('urlapp2/', include('UrlApp2.urls')): 다시 말하지만, 이 코드 줄은 UrlApp2애플리케이션의 라우팅 접두사를 정의합니다 /urlapp2/. 이 접두어로 시작하는 모든 URL은 처리를 위해 UrlApp2애플리케이션 파일 로 전달됩니다 urls.py.

2.3 정규식을 사용하여 경로 일치

Django의 re_path()기능을 사용하면 정규식을 사용하여 URL 패턴을 일치시킬 수 있습니다.

# 使用正则表达式匹配路由
from django.urls import re_path
from django.http import HttpResponse
from myapp import views

urlpatterns = [
    re_path(r'^[A-Za-z]+/$', views.re_view),
]

def re_view(request):
    return HttpResponse('这个视图的路由是英文字母响应')

이 예에서 정규식은 r'^[A-Za-z]+/$'하나 이상의 영어 문자로 시작하고 끝나는 모든 URL과 일치합니다. 일치하는 문자 부분이 re_view보기 함수 에 전달됩니다 . 이는 정규식의 일반적인 표현입니다.

2.4 URL 매개변수 전달

Django의 path()함수를 사용하면 매개변수를 URL에 정의하고 보기 함수에 전달할 수 있습니다.

# URL参数传递
from django.urls import path

urlpatterns = [
    path('demo/<urldata>/', views.get_url_data),
]

def get_url_data(request, urldata):
    return HttpResponse(f'从 URL 中获取到的参数为:{urldata}')

이 경우 <urldata>실제 URL 부분으로 대체되고 get_url_data보기 함수에 매개변수로 전달되는 동적 경로 매개변수입니다.

2.5 URL 매핑에 추가 데이터 전달

path()or re_path()함수는 사전을 세 번째 매개변수로 받아들일 수 있으며, 이는 추가 데이터로 보기 함수에 전달됩니다.

urlpatterns = [
    path('extra/', views.extra, {'age': 28}),
]

def extra(request, age):
    return HttpResponse(f'从 url 映射方法中获取到的附加数据为:{age}')

이 예에서는 사전이 보기 함수 {'age': 28}에 전달됩니다 .extra

2.6 기본 매개변수

보기 기능은 기본 매개변수 값을 허용할 수 있습니다. 해당 매개변수가 URL에 제공되지 않으면 기본값이 사용됩니다.

urlpatterns = [
    path('default/', views.default_data),
    path('default/<data>/', views.default_data),
]

def default_data(request, data=369):
    return HttpResponse(f'从 URL 中获取到的参数为:{data}')

 이 예에서 URL에 매개변수가 제공되지 않으면 data보기 기능은 기본값을 사용합니다 369.

2.7.라우팅 변환기

Django는 URL 매개변수를 특정 데이터 유형으로 변환하기 위한 몇 가지 내장 경로 변환기를 제공합니다.

urlpatterns = [
    path('int/<int:data>/', views.int_view),
    path('str/<str:data>/', views.str_view),
    path('path/<path:data>/', views.path_view),
    path('slug/<slug:data>/', views.slug_view),
    path('uuid/<uuid:data>/', views.uuid_view),
]

def int_view(request, data):
    return HttpResponse(f'使用 int 转换器,接收到的数据为:{data}')

def str_view(request, data):
    return HttpResponse(f'使用 str 转换器,接收到的数据为:{data}')

def path_view(request, data):
    return HttpResponse(f'使用 path 转换器,接收到的数据为:{data}')

def slug_view(request, data):
    return HttpResponse(f'使用 slug 转换器,接收到的数据为:{data}')

def uuid_view(request, data):
    return HttpResponse(f'使用 uuid 转换器,接收到的数据为:{data}')
  • int: 양의 정수를 일치시키고 매개변수를 정수 유형으로 변환합니다.
  • str: 비어 있지 않은 문자열과 일치합니다.
  • path: 슬래시를 포함하여 비어 있지 않은 모든 문자열과 일치합니다.
  • slug: 문자, 숫자, 밑줄, 대시와 일치합니다.
  • uuid: UUID(Universally Unique Identifier)와 일치합니다.

3. 역방향 분석 경로:

역파싱 라우팅은 Django의 매우 유용한 기능으로, URL 문자열을 직접 하드코딩하는 대신 뷰 함수 이름(즉, URL의 패턴 이름)을 통해 URL을 동적으로 구성할 수 있습니다. 이 접근 방식은 코드의 유지 관리성과 유연성을 향상시킵니다. 특히 URL 구조를 변경해야 하는 경우 urls.py프로젝트 전체에서 하드 코딩된 URL을 검색하고 바꾸는 대신 파일의 경로만 수정하면 됩니다.

Django에서 역방향 확인 라우팅은 하드 코딩된 경로 대신 사람이 읽을 수 있는 이름을 사용하여 템플릿과 뷰에서 URL을 참조할 수 있도록 하는 URL을 동적으로 검색하는 방법입니다. 이 접근 방식은 코드의 유지 관리성과 가독성을 향상시킵니다.

3.1 HTML 템플릿의 역파싱 경로

템플릿에서 {% url 'URL的模式名称' 参数 %}경로를 역분석하는 데 사용할 수 있습니다.

<body>
    反向解析路由<br>
    <a href="{% url 'num' %}">点击开奖</a><br>
    <a href="{% url 'age' 28 %}">不要点击</a><br>
</body>

여기에는 'num'보기 'age'의 URL 구성에 해당하는 URL의 패턴 이름이 있습니다.

3.2 뷰의 경로를 역방향으로 구문 분석

보기에서 reverse('URL的模式名称')URL을 가져오는 데 사용할 수 있습니다.

from django.urls import reverse
from django.http import HttpResponse
from django.shortcuts import redirect

def text(request):
    return HttpResponse(f'视图解析路由:{reverse("num")}')

def redirect_reverse(request):
    return redirect(reverse("num"))

def text_data(request, data):
    return HttpResponse(f'视图解析路由:{reverse("age", args=[data])}')

reverse이 함수는 URL의 패턴 이름과 선택적 매개변수 목록 또는 키워드 매개변수 사전을 승인하고 해당 URL을 반환합니다.

3.3URL 패턴 이름

에서는 함수의 매개변수에 값을 할당하여 URL의 패턴 이름을 정의할 수 있습니다 urls.py.pathname

from django.urls import path
from . import views

urlpatterns = [
    path('index/', views.index),
    path('html/', views.html_view),
    path('number/', views.number, name='num'),
    path('age/<data>/', views.data_view, name='age'),
]

3.4.URL 애플리케이션 네임스페이스

대규모 프로젝트에서는 서로 다른 애플리케이션이 서로 다른 URL 구성을 가질 수 있습니다. URL 패턴 이름 충돌을 피하기 위해 Django에서는 각 애플리케이션에 대한 네임스페이스를 정의할 수 있습니다.

3.5 애플리케이션 네임스페이스 정의

애플리케이션 파일에서 속성을 정의하여 애플리케이션의 네임스페이스를 설정할 urls.py수 있습니다.app_name

app_name = 'urlapp2'

3.6 템플릿에서 애플리케이션 네임스페이스 사용

템플릿의 특정 애플리케이션 네임스페이스에 속하는 URL을 역분석하는 경우 애플리케이션 네임스페이스와 URL의 패턴 이름을 지정해야 합니다.

<body>
    <a href="{% url 'urlapp2:num' %}">点击开奖</a><br>
    <a href="{% url 'urlapp2:age' 28 %}">不要点击</a><br>
</body>

여기서는 'urlapp2'애플리케이션의 네임스페이스이고 'num''age'URL의 패턴 이름입니다.

3.7 뷰에서 애플리케이션 네임스페이스 사용

또한 보기에서 URL을 역분석하려면 애플리케이션 네임스페이스와 함께 URL 패턴 이름을 사용해야 합니다.

def text(request):
    return HttpResponse(f'视图解析路由:{reverse("urlapp2:num")}')

def redirect_reverse(request):
    return redirect(reverse("urlapp2:num"))

def text_data(request, data):
    return HttpResponse(f'视图解析路由:{reverse("urlapp2:age", args=[data])}')

역방향 확인 라우팅은 URL을 하드 코딩하는 대신 동적으로 URL을 작성할 수 있게 해주는 Django의 강력한 기능입니다. URL 스키마 이름과 애플리케이션 네임스페이스를 정의하면 URL 충돌을 방지하고 코드를 더 명확하고 유지 관리하기 쉽게 만들 수 있습니다.

결론:

오늘은 Django의 라우팅 배포에 대한 부분을 공유하겠습니다. 라우팅 배포는 코드의 유연성과 유지 관리성을 향상시킬 수 있기 때문에 이 라우팅 배포는 전체 Django 프레임워크에서 매우 중요합니다. 라우팅 배포에 관한 내용 중 누락된 부분이 있을 수 있으니 많은 지원 부탁드립니다. 또한 사장님들의 수정 사항도 환영하며, 편집자도 겸허하게 받아들일 것입니다. 오늘의 나눔은 여기까지입니다. 다음에 만나요!

추천

출처blog.csdn.net/yz_518/article/details/142703369