Django 경로 제어 구현 코드

8118 단어 Django경로컨트롤
1.URL 경로 기반
URL 은 웹 서비스의 길목 입 니 다.사용자 가 브 라 우 저 를 통 해 보 내 는 모든 요청 은 지정 한 URL 주소 로 보 내 지고 응답 합 니 다.
django 프로젝트 의 작성 경 로 는 우리 가 어떤 URL 을 받 았 는 지 외부 로 노출 하 는 것 입 니 다.그 밖 에 어떠한 URL 도 처리 되 지 않 습 니 다.URL 경 로 는 웹 서비스 가 외부 로 노출 된 API 입 니 다.
2.Django 처리 요청
사용 할 URL conf 모듈 을 확인 합 니 다.보통 settings 에서 ROOTURLCONF 가 설정 한 값 입 니 다.들 어 오 는 HttpRequest 대상 이 urlconf 속성(미들웨어 설정)이 있 으 면 settings 의 ROOT 대신 값 을 사용 합 니 다.URLCONF
Django 모듈 을 불 러 오고 사용 가능 한 urlpatterns 를 찾 습 니 다.django.conf.urls.url()인 스 턴 스 의 목록 입 니 다.
모든 URL 모드 를 순서대로 실행 하면 매 칭 이 성공 하면 멈 추기 때문에 순서 가 중요 합 니 다.
주어진 보 기 를 성공 적 으로 가 져 왔 습 니 다.python 함수 나 클래스 기반 보기 입 니 다.보 기 는 다음 과 같은 인 자 를 얻 을 수 있 습 니 다.
  • HttpRequest 인 스 턴 스
  • 일치 하 는 정규 표현 식 이 무명 그룹 으로 되 돌아 오 면 위치 매개 변수 로 보기
  • 에 제공 합 니 다.
  • 키워드 매개 변 수 는 정규 유명 그룹 으로 구성 되 어 있 으 나 django.conf.urls.url()의 선택 가능 한 매개 변수 kwargs 로 덮어 쓸 수 있 습 니 다
  • URL 패턴 이 일치 하지 않 거나 오류 가 발생 하면 오류 처리 보 기 를 호출 합 니 다.
    3.간단 한 경로 설정
    from django.conf.urls import url
    
    urlpatterns=[
      url(     ,view    ,  ,  )
    ]
    
    예제 URL conf:
    
    from django.urls import url
    
    from . import views
    
    urlpatterns = [
      url(r'^articles/2003/$', views.special_case_2003),
      url(r'^articles/([0-9]{4})/$', views.year_archive),
      url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive),
      url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail),
    ]
    
    
    주:
  • URL 에서 값 을 캡 처 하면 괄호 나 괄호 를 추가 할 수 있 습 니 다
  • .
  • 선도 적 인 크로스 바 를 추가 하지 마 세 요.모든 URL 이 있 기 때 문 입 니 다.예 를 들 어^/articles
  • 가 아 닌^articles 여야 합 니 다.
  • 모든 정규 표현 식 앞의'r'는 선택 할 수 있 습 니 다.추가 하 는 것 을 권장 합 니 다.python 이라는 문자열 의 어떤 문자 도 전의 되 어 서 는 안 된다 는 것 을 알려 줍 니 다
  • 요청 한 예 및 일치 하 는 url
    /articles/2005/03/목록 의 세 번 째 모드 와 일치 합 니 다.Django 는 함수 views.month 를 호출 합 니 다.archive(request, '2005', '03')。
    /articles/2005/3/는 URL 모드 와 일치 하지 않 습 니 다.목록 의 세 번 째 모드 는 달 에 두 개의 숫자 를 요구 하기 때 문 입 니 다.
    /articles/2003/일치 목록 의 첫 번 째 모드 는 두 번 째 모드 가 아 닙 니 다.모드 가 순서대로 위 에서 아래로 일치 하기 때문에 첫 번 째 모드 가 먼저 일치 합 니 다.Django 는 함수 views.special 를 호출 합 니 다.case_2003(request)
    /articles/2003 은 모든 모드 가 URL 이 슬 래 쉬 로 끝 나 는 것 을 요구 하기 때문에 어떠한 모드 와 도 일치 하지 않 습 니 다.
    /articles/2003/03/03 은 마지막 모드 와 일치 합 니 다.Django 는 함수 views.article 를 호출 합 니 다.detail(request, '2003', '03', '03')。
    URL 접근 주소 뒤에/경로 가 있 는 설정 항목 으로 이동 하지 않 을 지 여부 입 니 다.
    
    APPEND_SLASH=True
    Django settings.py 프로필 에는 기본적으로 APPEND 가 없습니다.SLASH 라 는 매개 변 수 는 Django 기본 매개 변 수 는 APPEND 입 니 다.SLASH = True。 그 역할 은 자동 으로 사이트 끝 에'/'를 추가 하 는 것 이다.
    유명 하 다
    유명한 그룹의 문법 은(?Ppattern),그 중 name 은 그룹의 이름 이 고 pattern 은 일치 하 는 모드 입 니 다.
    이름 있 는 그룹 으로 URL conf 다시 쓰기:
    
    from django.conf.urls import url
    
    from . import views
    
    urlpatterns = [
      url(r'^articles/2003/$', views.special_case_2003),
      url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),
      url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive),
      url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})/$', views.article_detail),
    ]
    
    
    주:캡 처 한 값 은 위치 매개 변수 가 아 닌 키워드 매개 변수 로 보기 함수 에 전 달 됩 니 다.
    /articles/2005/03/views.month 호출 요청archive(request,year='2005',month='03')함수,views.month 가 아 닙 니 다.archive(request, '2005', '03') 。
    5.무명 분조 유명 분조 총화
    1.무명 그룹
    위치 에 따라 인삼 을 전달 하 다.
    그룹 을 나 눈 후 그룹 을 나 눈 데 이 터 를 위치 로 보기 함수 에 전달 하기 때문에 보기 함 수 는 형 삼 을 정의 해 야 합 니 다.
    예시:
    ​ url: (r'^articles/([0-9]{4})/([0-9]{2})$', views.article_detail)보기 함수: def article_detail(request,*args)2.유명 그룹
    키워드 에 따라 참조 하 다.
    그룹 을 나 눈 후 그룹 을 나 눈 데 이 터 를 키워드 매개 변수 로 보기 함수 에 전달 하기 때문에 보기 함 수 는 형 삼,형 삼 이름과 그룹의 이름 을 정의 해 야 합 니 다.순서 와 무관 합 니 다.
    예시:
    ​ url: (r'^articles/(?P<year>[0-9]{4})/(?P<mounth>[0-9]{2})/$', views.article_detail),보기 함수: def article_detail(request,mounth,year)주:유명 그룹 과 무명 그룹 은 혼용 하지 않 는 것 이 좋 습 니 다.
    6.역방향 해석
    django 프로젝트 에서 흔히 볼 수 있 는 수 요 는 URL 을 얻 는 최종 형식 으로 생 성 된 내용 에 삽입 하거나(보기 와 사용자 에 게 보 여 주 는 URL 등)서버 의 네 비게 이 션(방향 변경)을 처리 하 는 데 사 용 됩 니 다.하 드 인 코딩 URL 을 원 하지 않 습 니 다.
    Django 는 URL 에 name 인 자 를 제공 하고 사용자 정의,기억 하기 쉬 운 직관 적 인 문자열 을 할당 하 는 솔 루 션 을 제공 합 니 다.
  • 템 플 릿 에서:url 템 플 릿 라벨 사용
  • python 코드 에서 reverse()함수 사용
  • 예시:
    url 설정:
  • 인자 없 음:url(r'^publishedd 111/$',views.publishedd,name='dd'),
  • 무명 그룹:url(r'^publishedd/([0-9]{4})/([0-9]{2})/$',views.publishedd,name='dd'),
  • 유명한 그룹:url(r'^publishedd/(?P[0-9]{4})/(?P[0-9]{2})/$',views.publishadd,name='ddd'),
  • 템 플 릿 층:
  • 인자 없 음:{%url'dd'%}
  • 무명 그룹:{%url'dd'2018 12%}스페이스 바 분리,여러 값 전달
  • 유명한 그룹:{%url'dd'2018 12%}괜 찮 습 니 다{%url'dd'year=2018 mount=12%}
  • 보기 층:
    
    from django.shortcuts import reverse
  • 인자 없 음:url=reverse('dd')
  • 무명 그룹:url=reverse('dd',args=(2018,12,)
  • 유명한 그룹:url=reverse('dd',args=(2018,12,)는 url=reverse('dd',kwars={'year':2018,'mounth':12})
  • 도 가능 합 니 다.
    7.경로 배포
    모든 app 에서 각각 urls.py 경로 모듈 을 만 든 다음 루트 에서 출발 하여 app 에 속 하 는 url 요청 을 모두 해당 하 는 urls.py 모듈 로 전송 합 니 다.
    Django 1.1 버 전 배포
    
    from django.conf.urls import url,include
    예:
    총 경로:
  • -from django.conf.urls import include
  • -url(r'^blog/',include('blog.urls')),
  • -url(r'^app01/',include('app01.urls')),
  • 각각 경로 설정 url
  • app01--url(r'^publish/$', views.publish,name='app01_test'),
  • blog--url(r'^blogtest/$', views.test,name='blog_test'),
  • 경로 배포 에 사용 되 는 것 은 include()방법 입 니 다.미리 가 져 와 야 합 니 다.그의 매개 변 수 는 목적지 경 로 를 전달 하 는 문자열 입 니 다.
    중점:총 경로 뒤에$를 추가 할 수 없습니다.
    두 개의 서로 다른 app 은 각자 의 urlconf 에서 특정한 url 에 같은 name 을 지어 서 번 거 로 움 을 가 져 옵 니 다.이 문 제 를 해결 하기 위해 아래 의 네 임 스페이스 를 끌 어 냈 다.
    8.네 임 스페이스
    name 에 도 메 인 이 없 기 때문에 Django 는 URL 을 역 해 할 때 프로젝트 의 전체 순서 로 검색 합 니 다.첫 번 째 name 에서 지정 한 URL 을 찾 았 을 때 바로 돌아 갑 니 다.URL 네 임 스페이스 는 다른 app 이 같은 URL 이름 을 사용 하 더 라 도 유일한 URL 을 역 검색 할 수 있 습 니 다.
    예시:
    urls.py
    
    url(r'^blog/',include('blog.urls')),
    url(r'^app01/',include('app01.urls')),
    blog 의 urls.py
    
    url(r'^blogtest/$', views.test,name='test'),
    app 01 urls.py
    
    url(r'^publish/$', views.publish,name='test'),
    블 로그 의 보기 함수
    
    def test(request):
      url=reverse('test')
      return HttpResponse('blog test)
    app 01 의 보기 함수
    
    def test(request):
      url=reverse('test')
      return HttpResponse('app01 test)
    어쨌든 index 를 찾 는 것 은 app 01 의 index 입 니 다.
    해결 방법:총 경로 가 배 포 될 때 이름 공간 을 지정 하여 네 임 스페이스 를 실현 하 는 방법 은 간단 합 니 다.urlconf 파일 에 namespace='xxx'를 추가 하면 됩 니 다.
    
    url(r'^blog/',include('blog.urls',namespace='blog')),
    url(r'^app01/',include('app01.urls',namespace='app01')),
    보기 함수 가 역방향 으로 해석 할 때 어떤 이름 공간 에 있 는 지 지정 합 니 다.
    
    url = reverse('blog:test')
    템 플 릿 에 도 지정
    
    {% url 'blog:test'%}
    이름 공간 을 추천 하 는 것 은 아 닙 니 다.하위 경로 의 name 에 app 접 두 사 를 추가 하 는 것 을 추천 합 니 다.
    
    url(r'^publish/$', views.publish,name='app01_test'),
    9.위 정적
    진짜 정적 URL 과 유사 합 니 다.그 는 위 정적 규칙 을 통 해 동적 URL 을 정적 URL 로 위장 했다.
    urls.py 파일 에 일치 하 는.html 추가
    
    url(r'^book/(?P<id>\d+.html)',views.book),
    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기