2012-07-01 17 views
19

Ho questo URL = https://stackoverflow.com/questions/ask?next=1&value=3 Ora ho bisogno di ottenere la stringa di query da questo URL. Non voglio usare request.META per ottenere una stringa di query. Come mai ho capito che ci sono due modi per ottenere la stringa di queryIl modo migliore per ottenere una stringa di query da un URL in python?

  1. Utilizzando urlparse Usa urlparse.urlparse (url) .query DAT è

  2. Utilizzando url encode Usa UrlEncode e superare dizionario request.GET params in esso, per ottenere la rappresentazione di stringa di esso ....

In che modo è meglio ottenere la stringa della query ...? Alcuni dei miei colleghi dicono che l'urlencode è molto meglio, tuttavia non sono soddisfatto che ci siano risposte fino ad ora ... come hanno menzionato urlparse chiama internamente anche urlencode. Anche su questo punto ho dubbi che penso che urlparse e urlencode siano interamente independent.as urlencode è nel modulo urllib .... si prega di chiarire questa cosa.

risposta

38

Si può fare stringa di query utilizzando i parametri GET come questo

request.GET.urlencode() 

Questo non include il prefisso ? e potrebbe non restituire le chiavi nello stesso ordine della richiesta originale.

+7

È importante notare che poiché QueryDict esegue il wrapping di un dizionario non ordinato, request.GET.urlencode() potrebbe non restituire le chiavi nello stesso ordine in cui appaiono nell'URI della richiesta originale. – Aaron

+1

Questo è un fondamentale dei dizionari in realtà. Inoltre, la maggior parte delle stringhe di query deve essere considerata non ordinata se sono codificate. Se è una lista vera, sarà ordinata. – uchuugaka

50

Terza opzione:

>>> from urlparse import urlparse, parse_qs 
>>> url = 'http://something.com?blah=1&x=2' 
>>> urlparse(url).query 
'blah=1&x=2' 
>>> parse_qs(urlparse(url).query) 
{'blah': ['1'], 'x': ['2']} 

In Python 3+ questo è disponibile come:

from urllib.parse import parse_qs 

Documentation for urllib.parse

+6

Ok, non sono sicuro del motivo per cui si desidera che la stringa di query non venga elaborata, ma l'utilizzo di urlparse è il modo più leggibile e comprensibile. –

+0

Questo mi ha davvero aiutato: avevo bisogno di una mappa (o qualche oggetto) che contenesse i parametri da un URL di richiesta! –

Problemi correlati