2011-08-17 14 views
17

Parece que Flask no admite rutas con un componente codificado URI. Tengo curiosidad si estoy haciendo algo mal, o si hay una bandera especial que necesito incluir.Ruta del matraz con componente codificado URI

Mi ruta es como la siguiente:

@app.route('/foo/<encoded>/bar/') 
def foo(encoded): 
    # ... 
    pass 

La URL que este debe coincidir pueden parecerse a éstas:

http://foobar.com/foo/xxx/bar/ # matched correctly, no URI component 
http://foobar.com/foo/x%2Fx%2Fx%2F/bar/ # not matched correctly, URI component 

obras Ex URL, éste escupe un precioso 404.

¡Gracias!

Respuesta

24

Agregar path a la regla url:

@app.route('/foo/<path:encoded>/bar/')

actualización por comentario: Los documentos de la API de ruta está aquí: http://flask.pocoo.org/docs/api/#flask.Flask.route. Las clases subyacentes que implementan el convertidor ruta path estilo son aquí: http://werkzeug.pocoo.org/docs/routing/#custom-converters (. Esta es una de las partes realmente agradables de pocoostan) En cuanto a la barra final, hay reglas especiales que ascienden a:

Si una la regla termina con una barra diagonal y se solicita sin una barra por el usuario , el usuario se redirige automáticamente a la misma página con una barra diagonal posterior adjunta.

Si una regla no termina con una barra inclinada y el usuario solicita la página con una barra inclinada, se genera un 404 no encontrado.

También hay que tener en cuenta que si usted está en Apache y está esperando un url de roza seguido, es decir, un bookmarklet que se somete a http://ex.com/foo/<path:encoded>/bar y encoded obtiene algo con barras dobles, Apache convertir múltiples cuchilladas a una sola.

+0

Rad, eso lo solucionó. – sholsapp

+3

En caso de que alguien más tenga el mismo problema: me llevó un minuto darme cuenta de que estábamos agregando 'ruta', sin agregar' codificado'. Intenté y no pude agregar un filtro posterior 'codificado' en lugar de un filtro previo 'ruta'. – gwg

+0

¡tú y yo! –

Cuestiones relacionadas