Django 곤로

16769 단어 django
Django 라우팅
라우팅이란 사용자가 요청한 URL 링크에 따라 해당 프로세서를 판단하고 처리 결과를 반환하는 것입니다. 즉, URL이 Django의 보기와 매핑 관계를 맺는 것입니다.
Django 경로는 urls에 있습니다.py 구성, urls.py의 모든 설정은 상응하는 처리 방법에 대응한다.
Django 다른 버전 urls.py 설정이 좀 달라요.
  • Django1.1.x 버전
  • url () 방법: 일반 경로와 정규 경로를 모두 사용할 수 있으며, 정규 첫 번째 제한 기호를 수동으로 추가해야 합니다.
    from django.conf.urls import url #   url     
    
    urlpatterns = [
        url(r'^admin/$', admin.site.urls),
        url(r'^index/$', views.index), #     
        url(r'^articles/([0-9]{4})/$', views.articles), #     
    ]
    
  • Django 2.2.x 이후 버전
  • path: 일반 경로에 사용되며 정규 첫 번째 제한 기호를 수동으로 추가할 필요가 없습니다. 밑에 추가할 수 있습니다.
  • re_path: 정규 경로에 사용되며, 정규 첫 번째 제한 기호를 수동으로 추가해야 합니다.
  • from django.urls import re_path #  re_path     
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('index/', views.index), #     
        re_path(r'^articles/([0-9]{4})/$', views.articles), #     
    ]
    

    주:2.2.x버전에서도 URL () 방법을 사용할 수 있습니다
    정규 경로의 그룹
  • 정규 경로의 무명 그룹
  • 무명 분조는 위치에 따라 전참하여 일일이 대응한다.
    views에서 Request를 제외한 다른 인삼의 수량은 urls의 그룹 수량과 일치합니다.
    # urls.py
    urlpatterns = [
        path('admin/', admin.site.urls),
        re_path("^index/([0-9]{4})/$", views.index),
    ]
    
    # views.py
    from django.shortcuts import HttpResponse
    
    def index(request,year):
        print(year) #                 ,     
        return HttpResponse('hello world')
    
  • 정규 경로의 유명한 그룹
  • 구문
    (?P<  >     )
    

    유명 그룹은 키워드에 따라 참조를 전달하고 위치 순서와 무관하다
    # urls.py
    urlpatterns = [
        path('admin/', admin.site.urls),
        re_path("^index/(?P[0-9]{4})/(?P[0-9]{2})/$", views.index),
    ]
    
    # views.py
    from django.shortcuts import HttpResponse
    
    def index(request, year, month):
        print(year, month) #                 ,        
        return HttpResponse('hello world')
    

    라우팅 배포
    모든 app 디렉터리가 자신의 urls를 단독으로 가지도록 루트 배달 (include) 을 사용합니다.
    단계:
  • 1. 모든 app 디렉터리에 urls를 생성합니다.py 파일
  • 2. 프로젝트 이름 디렉터리에 있는 urls 파일에서 app 디렉터리에 경로를 통일적으로 나누어 준다
  • from django.contrib import admin
    from django.urls import path,include #   django.urls    include
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path("app01/", include("app01.urls")),
        path("app02/", include("app02.urls")),
    ]
    

    각 app 디렉터리에 자신의 urls를 쓰십시오.py 파일, 경로 이동.
    # app01  
    from django.urls import path,re_path 
    from app01 import views #      app      views 
    urlpatterns = [ 
        re_path(r'^login/(?P[0-9]{2})/$', views.index, ),
    ] 
    

    역해석
    기능의 증가로 인해 이전의 URL에 변화가 발생하면 대응하는 시청층과 모듈층의 URL을 변경해야 하기 때문에 매우 번거롭고 유지하기 불편하다.
    이 문제는 역방향 해석을 이용하여 해결할 수 있다. 루트 URL이 바뀌면 보기 층과 템플릿 층에서 변경된 URL을 동적 역방향으로 해석하여 수정 작업을 면할 수 있다.
    역방향 분석은 일반적으로 템플릿의 하이퍼링크와 보기의 방향을 바꾸는 데 사용된다.
  • 일반 경로
  • urls에 있습니다.py에서 라우팅의 별칭을 지정합니다.name=라우팅 별칭
    path("login1/", views.login, name="login")
    

    views에서.py에서,django.urls에reverse를 도입하여reverse('루트 별명')를 이용하여 역해석
    return redirect(reverse("login"))
    

    템플릿templates의 HTML 파일에서 {% url "루트 이름"%}을 사용하여 역으로 해석합니다.
    <form action="{% url 'login' %}" method="post"> 
    
  • 정규 경로(무명 그룹)
  • urls에 있습니다.py에서 라우팅 별칭,name=라우팅 별칭
    re_path(r"^login/([0-9]{2})/$", views.login, name="login")
    

    views에서.py에서reverse('루트 별명',args=(정규에 일치하는 매개 변수,)를 이용하여 역해석
    return redirect(reverse("login",args=(10,)))
    

    템플릿templates의 HTML 파일에서 {% url '루트 별명' 을 사용하여 정규와 일치하는 인자%} 역해석
    <form action="{% url 'login' 10 %}" method="post"> 
    
  • 정규 경로 (유명 그룹)
  • urls에 있습니다.py에서 라우팅 별칭,name=라우팅 별칭
    re_path(r"^login/(?P[0-9]{4})/$", views.login, name="login")
    

    views에서.py에서reverse('루트 별명', kwargs={'그룹 이름': 정규에 일치하는 매개 변수})를 이용하여 역해석
    return redirect(reverse("login", kwargs={"year":3333}))
    

    템플릿templates의 HTML 파일에서 {% url '루트 별명' 을 이용하여 그룹 이름 = 정규와 일치하는 인자%}를 역해석합니다.
    <form action="{% url 'login' year=3333 %}" method="post">
    

    네임스페이스
    네임스페이스(영어: Namespace)는 식별자의 가시 범위를 나타냅니다.
    이름 공간을 사용하면 서로 다른 app 디렉터리에 있는 urls에서 같은 루트 이름name을 정의할 때 URL 역해석 오류가 발생할 수 있습니다.
    라우팅 앨리어스 name에는 역할 영역이 없기 때문에 Django는 URL을 역으로 해석할 때 프로젝트의 전역 순서에 따라 검색하고 첫 번째 라우팅 앨리어스 name이 지정한 URL을 찾으면 바로 돌아갑니다.
    서식
    include(("app  :urls""app  "))
    

    인스턴스
    path("app01/", include(("app01.urls","app01"))) 
    path("app01/", include(("app02.urls","app02")))
    

    views에서.py에서 형식 사용
    reverse("app  :    ")
    

    인스턴스
    return redirect(reverse("app01:login")
    

    templates 템플릿의 HTML 파일에서 형식 사용
    {% url "app  :    " %}
    

    인스턴스
    <form action="{% url 'app01:login' %}" method="post">
    

    좋은 웹페이지 즐겨찾기