IT story

URL에서 매개 변수 검색

hot-time 2020. 6. 23. 07:20
반응형

URL에서 매개 변수 검색


다음과 같은 URL이 주어지면 쿼리 매개 변수의 값을 어떻게 구문 분석 할 수 있습니까? 예를 들어,이 경우 값을 원합니다 def.

/abc?def='ghi'

내 환경에서 Django를 사용하고 있습니다. request나를 도울 수 있는 방법이 있습니까?

나는 사용을 시도 self.request.get('def')했지만 ghi원하는대로 반환하지 않습니다 .


파이썬 2 :

import urlparse
url = 'http://foo.appspot.com/abc?def=ghi'
parsed = urlparse.urlparse(url)
print urlparse.parse_qs(parsed.query)['def']

파이썬 3 :

import urllib.parse as urlparse, parse_qs
url = 'http://foo.appspot.com/abc?def=ghi'
parsed = urlparse(url)
print(parse_qs(parsed.query)['def'])

import urlparse
url = 'http://example.com/?q=abc&p=123'
par = urlparse.parse_qs(urlparse.urlparse(url).query)

print par['q'][0], par['p'][0]

이 솔루션이 아직 여기에 있지 않다는 것에 놀랐습니다. 사용하다:

request.GET.get('variable_name')

이렇게하면 "GET"사전에서 변수를 "가져오고"변수가 있으면 'variable_name'값을, 존재하지 않으면 None 객체를 반환합니다.


파이썬> 3.4

from urllib import parse
url = 'http://foo.appspot.com/abc?def=ghi'
query_def=parse.parse_qs(parse.urlparse(url).query)['def'][0]

furl이라는 새로운 라이브러리가 있습니다. 이 라이브러리가 url 대수를 수행하는 데 가장 비열한 것으로 판명되었습니다. 설치하기 위해서:

pip install furl

암호:

from furl import furl
f = furl("/abc?def='ghi'") 
print f.args['def']

나는 이것이 조금 늦었다는 것을 알고 있지만 오늘 여기에서 나 자신을 발견 한 후에 이것은 다른 사람들에게 유용한 대답이라고 생각했습니다.

import urlparse
url = 'http://example.com/?q=abc&p=123'
parsed = urlparse.urlparse(url)
params = urlparse.parse_qsl(parsed.query)
for x,y in params:
    print "Parameter = "+x,"Value = "+y

parse_qsl ()을 사용하면 "데이터가 이름, 값 쌍의 목록으로 리턴됩니다."


당신이 참조하는 URL은 쿼리 유형이며 요청 객체는 쿼리 인수를 얻기 위해 인수 라는 메소드를 지원합니다 . self.request.get('def')객체에서 직접 가치를 얻으 려고 할 수도 있습니다 .


def getParams(url):
    params = url.split("?")[1]
    params = params.split('=')
    pairs = zip(params[0::2], params[1::2])
    answer = dict((k,v) for k,v in pairs)

도움이 되었기를 바랍니다


urlparse 모듈은 필요한 모든 것을 제공합니다 :

urlparse.parse_qs ()


아무 것도 할 필요가 없습니다. 와 함께

self.request.get('variable_name')

메소드 (GET, POST 등)를 지정하지 않았습니다. 이것은 잘 문서화되어 있으며 이것은 예입니다

Django 템플릿을 사용한다고해서 장고가 처리기를 처리한다는 의미는 아닙니다.


순수한 파이썬에서 :

def get_param_from_url(url, param_name):
    return [i.split("=")[-1] for i in url.split("?", 1)[-1].split("&") if i.startswith(param_name + "=")][0]

import cgitb
cgitb.enable()

import cgi
print "Content-Type: text/plain;charset=utf-8"
print
form = cgi.FieldStorage()
i = int(form.getvalue('a'))+int(form.getvalue('b'))
print i

Btw, I was having issues using parse_qs() and getting empty value parameters and learned that you have to pass a second optional parameter 'keep_blank_values' to return a list of the parameters in a query string that contain no values. It defaults to false. Some crappy written APIs require parameters to be present even if they contain no values

for k,v in urlparse.parse_qs(p.query, True).items():
  print k

There is a nice library w3lib.url

from w3lib.url import url_query_parameter
url = "/abc?def=ghi"
print url_query_parameter(url, 'def')
ghi

참고URL : https://stackoverflow.com/questions/5074803/retrieving-parameters-from-a-url

반응형