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.