2011-01-20 17 views
7

Estoy usando webpy framefork. Quiero servir el archivo estático en una de las solicitudes. ¿Hay algún método especial en el marco de webpy o simplemente tengo que leer y devolver ese archivo?¿Cómo se sirve el archivo en webpy?

Respuesta

10

Si está ejecutando el servidor dev (sin apache):

Crear un directorio (también conocida como una carpeta) llamado estático en la ubicación de la secuencia de comandos que se ejecuta el servidor web.py. A continuación, coloque los archivos estáticos que desea publicar en la carpeta estática.

Por ejemplo, la URL http://localhost/static/logo.png enviará la imagen ./static/logo.png al cliente.

Referencia: http://webpy.org/cookbook/staticfiles


actualización. Si realmente necesita para servir a un archivo estático en / sólo tiene que utilizar un redireccionamiento:

#!/usr/bin/env python 

import web 

urls = (
    '/', 'index' 
) 

class index: 
    def GET(self): 
     # redirect to the static file ... 
     raise web.seeother('/static/index.html') 

app = web.application(urls, globals()) 

if __name__ == "__main__": app.run() 
+0

que solo sirve archivos en/ruta estática, necesito servir index.html a petición con ruta/ – codez

+0

@codez: actualicé mi respuesta. – miku

+0

esto solo funciona si ejecuta la aplicación web.py directamente desde la carpeta donde se encuentra. si quieres ejecutar /path/to/my/web/app.py, no tienes suerte. – Octopus

6

Luché con esto durante el último par de horas ... ¡qué asco!

encontrado dos soluciones que están trabajando para mí ... 1 - .htaccess en añadir esta línea antes de la línea modrewrite:

RewriteCond %{REQUEST_URI} !^/static/.* 

Esto se asegurará de que las peticiones al/directorio/estática son NO reescrito para ir a tu script code.py

2 - en el code.py agregar un controlador de estática y una entrada de URL para cada uno de varios directorios:

urls = (
    '/' , 'index' , 
    '/add', 'add' , 
    '/(js|css|images)/(.*)', 'static', 
    '/one' , 'one' 
    ) 

class static: 
    def GET(self, media, file): 
     try: 
      f = open(media+'/'+file, 'r') 
      return f.read() 
     except: 
      return '' # you can send an 404 error here if you want 

Nota - robé esto desde el grupo web.py google pero no puede encontrar la ¡Dang Post más!

Cualquiera de estos funcionó para mí, tanto dentro de las plantillas para web.py y por un llamado directo a una página web que he puesto en "estática"

+0

¿Vio algún beneficio de estos métodos en http://webpy.org/cookbook/staticfiles? – dimo414

+0

Lo hice funcionar, no pude conseguir que otros métodos funcionaran, así que supongo que es una ventaja ;-) Estaba trabajando en una cuenta de alojamiento compartido, así que puede haber sido una de mis dificultades. –

+1

@tom - gracias! me salvaste un par de horas con esta publicación. – incognick

1

No recomiendo servir archivos estáticos con Web .py. Será mejor que tengas apache o nginx configurado para eso.

+0

¿por qué no? sería beneficioso comprender tus razones. – Octopus

+0

Porque será lento –

Cuestiones relacionadas