Django의 URL 매핑

5427 단어 Django
Django의 URL 매핑
url 매핑 작용
Django의 MTV 모드에 따라 url의 매핑은 사용자가 입력하거나 전송한 url 경로에 따라 해당하는view 함수를 구분하여 사용자의 조작에 응답하는 것이다.
url 매핑 방식
Django 프로젝트를 만들면 프로젝트 이름과 같은 전역 패키지를 자동으로 생성합니다. urls.py가 그 안에 있다.

urlpatterns = [
    path('admin/', admin.site.urls),
]

Django가 자동으로 추가한 매핑입니다.우리의view 함수는 자신이 만든 app에 있기 때문에 먼저 app 패키지의views를 도입해야 합니다

from blog import views

이렇게 하면 urlpatterns에 자신의 맵 조건을 추가할 수 있다. 예를 들어

from blog import views
urlpatterns = [
    path('admin/', admin.site.urls),
    path('blog/',views.blog)

]

상응하는 보기 함수를 쓰다

from django.shortcuts import render,HttpResponse

def blog(request):
    return HttpResponse("WELCOME")

이렇게 브라우저에 127.0.0.1:8000/blog/를 입력하면 되돌아오는 WELCOME를 볼 수 있습니다.
url 매핑 함수
urlpatterns에서 두 가지 함수를 사용할 수 있습니다. path () 는 문자열 루트에 사용됩니다.repath () 처리 정규 루트입니다.
path 함수
필수 매개변수
path () 에는 경로 문자열과 호출된 함수 두 개의 필수 인자가 있습니다.위의 예와 같다

path('blog/',views.blog)

이것은 경로 뒤에 블로그를 추가하는 경우에만 일치하고views의 블로그 함수를 실행합니다. 정적, 정확한 맵을 표시합니다.경로 문자열은 정확한 경로를 채우는 것 외에 작성할 수 있으며 url과 일치하는 동시에 매개 변수를 전달할 수 있으며 일치하는 범위가 더욱 넓다.예를 들면 다음과 같습니다.

path('/year/',views.year)

임의의 정수/year/'와 일치할 수 있으며, 일치하는 정수는 변수 이름인 year 형식으로 매개 변수로views. year 함수에 전달됩니다. 여기 주의하십시오:views. year 함수의 매개 변수 이름은 url이 비추었을 때의 이름과 같아야 합니다. 즉, "year".데이터 유형은 다음과 같습니다.
데이터 형식
설명
str
구분자(/)를 제외한 공백 문자 일치
int
0과 양의 정수 일치
slug
알파벳, 숫자, 가로줄, 밑줄로 구성된 문자열,str의 서브집합과 일치
uuid
075194d3-6885-417e-a8a8-6c931e272f00
path
경로 구분자를 포함한 모든 비공식 문자열과 일치합니다. 전체 집합입니다.
비필요 매개 변수
path의 비필요 매개 변수도 두 가지가 있는데 하나는 보기 함수에 전달하는 매개 변수이고 하나는 별명이다.보기 함수에 전달하는 매개 변수는 상기 URL을 제외하고 path () 에 수동으로 입력하고 사전 형식으로 입력할 수 있습니다. 왜냐하면 이 매개 변수의 형식은 **kwargs이기 때문입니다.보기 함수의 매개 변수 역시 사전의 키 이름과 같아야 한다.예를 들면 다음과 같습니다.

path('/year/',views.year,{"name":"sfencs","age":20})

def year(req,year,name,age):
    str1=str(year)+" "+name+" "+str(age)
    return HttpResponse(str1)

url 파라미터와 사전 형식 파라미터가 모두 사용되고 이름이 같으면 다음과 같습니다.

path('/year/',views.year,{"name":"sfencs","year":20})

그러면 보기 함수에 year 인자만 추가할 수 있고 사전의 year 데이터 20은 URL의 데이터를 덮어씁니다.마지막 매개변수는 별칭입니다. 예를 들면 다음과 같습니다.

path('blog/',views.blog,name="abc")

html에서form표가 제출하는 경로는 abc로/blog/를 대체할 수 있으며 구체적인 방식은

<form action="{% url 'alias' %}" method="post">

이런 방식은 전단에서만 사용할 수 있으며, 주소 표시줄에서 별명을 사용해서 접근하는 것은 소용없다.
re_path() 함수
re_path () 함수는 path () 함수와 유사하지만, 문자열 모드 대신 정규 표현식 모드를 사용합니다. 정규 모드에 맞으면 일치할 수 있습니다.

re_path("^\d+/day/",views.day)

여기도 URL을 통해 매개 변수를 전달할 수 있으며 정규식으로 그룹을 나누는 방식을 사용합니다

re_path("^(\d+)/day/",views.day)

그룹에 이름을 붙이는 패턴이 없습니다. 즉, 이름이 없는 매개 변수입니다. 그룹에 일치하는 데이터는 자동으로 매개 변수가 보기 함수에 전달되지만, 보기 함수의 인삼은 매개 변수를 하나 더 써야 합니다. 이름은 임의입니다.

re_path("^(?P\d+)/day/",views.day)

위에서 명명한 매개 변수는 보기 함수는 반드시 그 이름을 매개 변수 이름으로 해야 한다. 마찬가지로 수동으로 추가한 매개 변수가 그 이름과 같으면 수동으로 추가한 매개 변수 데이터는 정규식에서 덮어쓸 것이다.
라우팅 배포
만약 우리 프로젝트에 여러 개의 앱이 있다면, 모든 맵은 같은 urls에 기록됩니다.py, 또는 하나의 URL을 공용하면 오류가 발생하고 혼동이 발생할 수 있습니다. 그러면 우리는 모든 앱에서 자신의urls를 구축할 수 있습니다.py는 자신의 映射 관계를 처리하고 전역urls에서 나누어 줍니다.구체적인 방법: 전역urls에 추가

path('blog/',include('blog.urls'))

블로그 폴더에 urls를 만듭니다.py 파일, 파일에 쓰기

from django.urls import path,re_path
from blog import views

urlpatterns = [
    path("login/",views.login)

]

그러면 주소 표시줄에/blog/login을 입력하면 전역 urls에서 블로그 아래의 urls로 나누어 주고 해당하는 보기 함수를 비추게 됩니다.
  • 마지막으로 주의해야 할 것은 모든 URL 매핑은 위에서 아래로 순서대로 매칭되고 첫 번째 매칭이 성공하면 아래에서 진행되지 않는다는 것이다.


  • 좋은 웹페이지 즐겨찾기