Existe alguma solução inteligente para armazenar arquivos estáticos no diretório raiz do aplicativo Flask. Espera-se que o arquivo robots.txt e o sitemap.xml sejam encontrados em /, então minha ideia era criar rotas para eles:
@app.route('/sitemap.xml', methods=['GET'])
def sitemap():
response = make_response(open('sitemap.xml').read())
response.headers["Content-type"] = "text/plain"
return response
Deve haver algo mais conveniente :)
@vonPetrushev está certo, na produção você vai querer servir arquivos estáticos via nginx ou apache, mas para o desenvolvimento é bom ter seu ambiente de desenvolvimento simples, tendo seu aplicativo Python servindo o conteúdo estático também, então você não precisa se preocupar sobre como alterar configurações e vários projetos. Para fazer isso, você vai querer usar o SharedDataMiddleware .
Este exemplo assume que seus arquivos estáticos estão na pasta "estáticos", ajuste para o que for adequado ao seu ambiente.
fonte
A resposta mais limpa a esta pergunta é a resposta a esta pergunta (idêntica) :
Para resumir:
fonte
Mesmo que esta seja uma velha pergunta respondida, estou respondendo porque esta postagem aparece bem no topo dos resultados do Google. Embora não seja abordado na documentação, se você ler os documentos da API para o construtor de objeto Flask Application, será abordado. Passando o parâmetro nomeado
static_folder
assim:... você pode definir de onde os arquivos estáticos são servidos. Da mesma forma, você pode definir um
template_folder
, o seu nomestatic_url_path
.fonte
/static
mas você pode alterar isso substituindostatic_url_path
.A entrega de arquivos estáticos não tem nada a ver com o aplicativo destinado a entregar conteúdo dinâmico. A maneira correta de servir arquivos estáticos depende de qual servidor você está usando. Afinal, quando você colocar seu aplicativo em funcionamento, precisará vinculá-lo a um servidor web. Posso falar apenas em apache httpd, então a forma de servir arquivos estáticos é definida no host virtual que você está vinculando ao seu aplicativo por meio de mod-wsgi. Aqui está o guia que mostrará como veicular mapas de sites, robots.txt ou qualquer conteúdo estático: http://code.google.com/p/modwsgi/wiki/QuickConfigurationGuide#Mounting_At_Root_Of_Site
fonte
Outra maneira de enviar arquivos estáticos é usar uma regra pega-tudo como esta:
Eu uso isso para tentar minimizar a configuração durante o desenvolvimento. Tive a ideia em http://flask.pocoo.org/snippets/57/
Além disso, estou desenvolvendo usando flask em minha máquina autônoma, mas implantando com Apache no servidor de produção. Eu uso:
fonte
Isso pode ter sido adicionado desde que esta pergunta foi feita, mas eu estava procurando no "helpers.py" do flask e encontrei flask.send_from_directory:
... que faz referência a flask.send_file:
... o que parece melhor para mais controle, embora send_from_directory passe ** opções diretamente para send_file.
fonte
Da documentação aqui: http://flask.pocoo.org/docs/quickstart/#static-files
fonte
Estou tendo o mesmo dilema também. Fiz alguma pesquisa e encontrei minha resposta (MHO):
Pode muito bem citar a documentação
IMHO: Quando seu aplicativo está em produção , o serviço de arquivos estáticos deve ser (ou é idealmente) configurado no servidor da web (nginx, apache); mas durante o desenvolvimento , o Flask o disponibilizou para servir arquivos estáticos. Isso é para ajudá-lo a desenvolver-se rapidamente - sem necessidade de configurar servidores da Web e outros.
Espero que ajude.
fonte
Experimente isto:
fonte