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.

Back to Top