Como implementar com WSGI¶
A principal plataforma de deploy do Django é WSGI, o padrão Python para servidores web e aplicações.
O comando de gerenciamento do Django startproject
define uma configuração WSGI simples padrão para você, que você pode ajustar conforme necessário para o seu projeto, e direcionar qualquer servidor de aplicações compatível com WSGI para uso.
O Django inclui documentação básica para os seguintes servidores WSGI:
O objeto Application
¶
O conceito chave para implantação com WSGI é o executável application
o qual o servidor de aplicação usa para se comunicar com seu código. Isso é comumente fornecido como um objeto chamado application
em um módulo Python acessível ao servidor.
O comando startproject
cria um arquivo <project_name>/wsgi.py
que contém a tal application
executável.
Ele é usado tanto para o servidor de desenvolvimento do Django quanto para a implantação WSGI para produção.
Servidores WSGI obtém o caminho para o executável da application
da sua configuração. O servidor embutido do Django, comando denominado runserver
, lê isso da definição WSGI_APPLICATION
. Por padrão, está definido como <project_name>.wsgi.application
, o que aponta para o executável de application
no <project_name>/wsgi.py
.
Configurando o módulo de definições.¶
QUando o servidor WSGI carrega sua aplicação, o Django precisa importar o módulo de definições que é onde toda a sua aplicação é definida.
O Django usa a variável de ambiente DJANGO_SETTINGS_MODULE
para localizar o módulo de definições apropriado. Este deve conter um caminho pontuado para o módulo de definições. Você pode usar um valor diferente para desenvolvimento e produção; Tudo depende de como você organiza suas definições.
Se essa variáve não está setada, o padrão wsgi.py
define isso como mysite.settings
, onde mysite
é o nome do seu projeto. Assim é o padrão de como o runserver
descobre o arquivo de definições padrão.
Nota
Uma vez que as variáveis de ambiente são para todo o processo, isso não funciona quando você executa múltiplos Django sites no mesmo processo. Isso acontece com mod_wsgi.
Para evitar este problema, use o daemon do mod_wsgi com cada site em seu próprio processo, ou substitua o valor do ambiente forçando os.environ["DJANGO_SETTINGS_MODULE"] = "mysite.settings"
no seu wsgi.py
.
Aplicando o middleware WSGI¶
Pra aplicar o WSGI middleware você pode simplesmente envolver o objeto da aplicação. Por exemplo, você pode adicionar essas linhas no final do wsgi.py
:
from helloworld.wsgi import HelloWorldApplication
application = HelloWorldApplication(application)
Poderia também substituir a aplicação WSGI Django por uma aplicação WSGI que mais tarde delega à aplicação WSGI Django, se quiser combinar uma aplicação Django com uma aplicação WSGI de um outro framework.
Nota
Algumas middleware WSGI de terceiros não chamam close
no objeto de resposta depois de manipular um request. Nestes casos o sinal request_finished
não é enviado. Isso pode resultar em conexões inativas no banco e em servidores memcache.