¿Existe alguna solución inteligente para almacenar archivos estáticos en el directorio raíz de la aplicación de Flask? Se espera que robots.txt y sitemap.xml se encuentren en /, por lo que mi idea fue crear rutas para ellos:
@app.route('/sitemap.xml', methods=['GET'])
def sitemap():
response = make_response(open('sitemap.xml').read())
response.headers["Content-type"] = "text/plain"
return response
Debe haber algo más conveniente :)
@vonPetrushev tiene razón, en producción querrá entregar archivos estáticos a través de nginx o apache, pero para el desarrollo es bueno que su entorno de desarrollo sea simple, ya que su aplicación Python también ofrece contenido estático para que no tenga que preocuparse sobre el cambio de configuraciones y múltiples proyectos. Para hacer eso, querrá usar SharedDataMiddleware .
Este ejemplo asume que sus archivos estáticos están en la carpeta "static", ajústelos a lo que se ajuste a su entorno.
fuente
La respuesta más limpia a esta pregunta es la respuesta a esta pregunta (idéntica) :
Para resumir:
fuente
A pesar de que esta es una vieja pregunta respondida, estoy respondiendo esto porque esta publicación aparece bastante arriba en los resultados de Google. Si bien no está cubierto en la documentación, si lee los documentos de la API para el constructor de objetos Flask Application, está cubierto. Pasando el parámetro nombrado
static_folder
así:... puede definir desde dónde se sirven los archivos estáticos. Del mismo modo, puede definir a
template_folder
, su nombrestatic_url_path
.fuente
/static
pero puede cambiarlo anulandostatic_url_path
.El servicio de archivos estáticos no tiene nada que ver con la aplicación que está destinada a entregar contenido dinámico. La forma correcta de servir archivos estáticos depende del servidor que esté utilizando. Después de todo, cuando tenga su aplicación en funcionamiento, deberá vincularla a un servidor web. Solo puedo hablar por apache httpd, por lo que la forma de servir archivos estáticos se define en el host virtual que está vinculando a su aplicación a través de mod-wsgi. Aquí está la guía que le mostrará cómo servir mapas del sitio, robots.txt o cualquier contenido estático: http://code.google.com/p/modwsgi/wiki/QuickConfigurationGuide#Mounting_At_Root_Of_Site
fuente
Otra forma de enviar archivos estáticos es usar una regla general como esta:
Utilizo esto para tratar de minimizar la configuración durante el desarrollo. Obtuve la idea de http://flask.pocoo.org/snippets/57/
Además, estoy desarrollando usando flask en mi máquina independiente pero implementando con Apache en el servidor de producción. Yo suelo:
fuente
Esto podría haberse agregado desde que se hizo esta pregunta, pero estaba mirando a través de "helpers.py" de flask y encontré flask.send_from_directory:
... que hace referencia a flask.send_file:
... que parece mejor para un mayor control, aunque send_from_directory pasa ** opciones directamente a send_file.
fuente
De la documentación aquí: http://flask.pocoo.org/docs/quickstart/#static-files
fuente
Yo también tengo el mismo dilema. Hice una búsqueda y encontré mi respuesta (MHO):
También podría citar de la documentación.
En mi humilde opinión: cuando su aplicación está en producción , el servicio de archivos estáticos debe estar (o idealmente) configurado en el servidor web (nginx, apache); pero durante el desarrollo , Flask lo puso a disposición para servir archivos estáticos. Esto es para ayudarle a desarrollarse rápidamente, sin necesidad de configurar servidores web ni nada por el estilo.
Espero eso ayude.
fuente
Prueba esto:
fuente