2010-06-14 13 views
10

Sto utilizzando Django con Google App Engine.Come posso ricevere le barre con la percentuale di codifica con Django su App Engine?

Desidero inviare informazioni al server con barre codificate in percentuale. Una richiesta come http:/localhost/turtle/waxy%2Fsmooth corrispondente a un URL come r'^/turtle/(?P<type>([A-Za-z]|%2F)+)$'. La richiesta arriva al server intatta, ma prima che venga confrontata con la regex,% 2F viene convertito in una barra diretta.

Cosa posso fare per impedire che% 2Fs venga convertito in barre? Grazie!

+2

Perché non è possibile modificare la regexp per utilizzare la versione non codificata? –

+3

Stiamo usando un design RESTful e abbiamo altre regex che sembrano 'r '^/turtle/(? P ([A-Za-z] |% 2F) +)/shell $''. Vogliamo distinguere tra barre che fanno parte della gerarchia di URL e barre che fanno parte di un nome tartaruga. –

+1

Aggiungerò questo al mio elenco di requisiti che uso durante la valutazione dei framework web Python candidati. –

risposta

3

os.environ['PATH_INFO'] viene decodificato, quindi si perde questa informazione. Probabilmente è disponibile os.environ['REQUEST_URI'] e, se disponibile, non viene decodificato. Django legge solo PATH_INFO. Probabilmente si potrebbe fare qualcosa di simile:

request_uri = environ['REQUEST_URI'] 
request_uri = re.sub(r'%2f', '****', request_uri, re.I) 
environ['PATH_INFO'] = urllib.unquote(request_uri) 

Poi tutti i casi di% 2F sono sostituiti con **** (o qualsiasi altra cosa che si desidera utilizzare).

+0

Cosa imposta REQUEST_URI? Non lo vedo nella lista delle variabili wsgi richieste da pep 333. –

+0

Non è richiesto in PEP 333, ma è ampiamente impostato come parte delle richieste CGI (o CGI). In GAE, se esiste, è certo che continuerà a esistere. È il percorso completo della richiesta, senza che l'URL sia codificato. –

+2

'os.environ ['REQUEST_URI']' non è disponibile su GAE. –

Problemi correlati