2019-08-06 Django가 URL에서 매개변수를 가져오는 방법
url 설정의 루트는 ROOTURLCONF, 이 설정은 프로젝트의 settings입니다.py 파일에서 일반적으로 프로젝트를 만들면 이 설정은 settings 파일에 자동으로 나타나고 그 값은 프로젝트 이름입니다.urls, 이 설정을 알면 url 설정의 루트를 임의로 수정할 수 있습니다.이것은 일반적인 상황입니다. 만약 일부 중간부품을 사용한다면 Http Request 자체에 urlconf 파라미터를 요청할 수 있습니다. 이 때 우리가 설정한urlconf는 덮어쓰입니다.
ROOT 찾기URLCONF 후,django는 이 모듈을 불러오고 그 중의 변수urlpatterns를 찾습니다. 이 변수는list 데이터 형식이고,list의 요소의 유형은 버전에 따라 차이가 있습니다.django 버전 2.0 이전에는django를 사용했습니다.conf.urls.url() 대상, 2.0 및 이후에 사용한django.urls.path() 및 django.urls.re_path(),
1.X시대, 오직 django.conf.urls.url (), 형식은 다음과 같습니다.
from django.conf.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),
]
이런 유형의urlpattern은 모두 정규 표현식을 사용하여 일치한다. 만약에 파라미터를 얻으려면 대응하는 정규 표현식 부분을 괄호 안에 넣을 수 있다. 예를 들어 요청/articles/2005/03/는 위의 세 번째 조항에 일치한다. 두 개의 괄호가 있기 때문에 두 개의 파라미터가 있고 실제 호출된 보기 함수 방식은views이다.month_archive(request,'2005','03'), 이런 유형의 매개 변수는 unamed group 매개 변수로 보기 함수를 쓸 때 두 가지 쓰기 방법이 있다.
#
def month_archive(request,year_p,month_p):
print(year_p,month_p)
...
#
:
def month_archive(request,*args):
year=args[0]
month=args[1]
...
이런 파라미터도 위치 파라미터positional arguments라고 부른다. (주의:/articles/2005/3/이런 요청은 위의 URL과 일치하지 않습니다. 위치가 맞지 않기 때문입니다.)
위에서 이런 것을 unamed group이라고 하는데, 필연적으로named group이라고 하는데, 이런 일치하는 매개 변수를 키워드 매개 변수인 keyword arguments라고 한다.이런 urlpattern은 다음과 같이 쓴다.
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^articles/2003/$', views.special_case_2003),
url(r'^articles/(?P[0-9]{4})/$', views.year_archive),
url(r'^articles/(?P[0-9]{4})/(?P[0-9]{2})/$', views.month_archive),
url(r'^articles/(?P[0-9]{4})/(?P[0-9]{2})/(?P[0-9]{2})/$', views.article_detail),
]
첫 번째에 비해 두 번째가 앞에 늘어났다는 것을 알 수 있을까?P 부분에서 얻은 매개 변수의 이름을 사전에 붙일 수 있습니다. 예를 들어:/articles/2005/03/이런 URL 호출 함수는:views입니다.month_archive(request, year='2005', month='03') 보기에서 이 인자를 가져오는 형식은 다음과 같습니다.
#
def month_archive(request,year,month):
print(year,month)
...
** year month url , , unamed group
#
def month_archive(request,**kwargs):
print(kwargs['year'],kwargs['month'])
...
위에 이것들은 django 1.X버전 쓰기X버전,django는 정규 표현식의 일치뿐만 아니라 일반적인 일치도 제공한다. 구체적으로 말하면 1.X의 URL () 일치는repath (), 일반 문자열 일치는 path (), 정규 표현식 일치repath () 의 사용법과 1.X의 URL () 과 같이 path () 가 일치하는 용법 예시를 보십시오.
from django.urls import path
from . import views
urlpatterns = [
path('articles/2003/', views.special_case_2003),
path('articles//', views.year_archive),
path('articles///', views.month_archive),
path('articles////', views.article_detail),
]
새로운 문법이 더욱 간결해 보이고 매개 변수를 얻는 형식이 중괄호<>로 바뀌었다는 것을 알 수 있다. 이 안의 첫 번째 매개 변수는 변환기converter이고 두 번째 매개 변수는 변수 이름이다. 주의1.X 버전에서 얻은 변수는 모두 문자열 형식입니다. 이것은 2.X버전은 네가 다르다, 2.X는 변수의 유형을 정의할 수 있습니다. 사용하는 것이 바로 변환기 converter입니다. 예를 들어 여기 int는 가져온 파라미터를 디지털형으로 바꾸어 보기에 직접 사용합니다.django에 내장된 변환기는 다음과 같은 몇 가지가 있습니다.
str
- Matches any non-empty string, excluding the path separator, '/'
. This is the default if a converter isn’t included in the expression. int
- Matches zero or any positive integer. Returns an int. slug
- Matches any slug string consisting of ASCII letters or numbers, plus the hyphen and underscore characters. For example, building-your-1st-django-site
. uuid
- Matches a formatted UUID. To prevent multiple URLs from mapping to the same page, dashes must be included and letters must be lowercase. For example, 075194d3-6885-417e-a8a8-6c931e272f00
. Returns a UUID
instance. path
- Matches any non-empty string, including the path separator, '/'
. This allows you to match against a complete URL path rather than just a segment of a URL path as with str
. django 역시 개발자에게 사용자 정의 변환기 기능을 부여했습니다. 여기는 소개하지 않겠습니다.https://docs.djangoproject.com/en/2.1/topics/http/urls/#registering-custom-path-converters
위에서 설명한 것은 urlpattern에서 파라미터를 얻는 것이다.django에서 내장되어 실현된 것이고 또 하나는 HTTP 요청에서 파라미터를 얻는 것이다.
흔히 볼 수 있는 것은 GET와 POST 요청입니다. 이 인자는 요청 Request에 봉인되어 있고, GET가 요청한 데이터는 Request에 있습니다.GET에서 POST의 요청을 Request에 넣습니다.포스터에서.
GET 요청에 대해 일반적인 매개 변수는 URL에 직접 나타납니다. 예를 들어domain/search/?q=haha,request를 사용할 수 있습니다.GET.get('q')이나 Request,GET['q']가 q 인자를 가져오면 POST가 요청한 데이터가 URL에 나타나지 않습니다.
일반적으로 우리는 파라미터를 가져와서 Request를 사용합니다.GET.get('xx','')/request.POST.get('xx',')의 형식으로 get 함수의 두 번째 인자는 xx 인자가 없을 때 되돌아오는 기본값입니다
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.