Usando Django com IIS e SQL Server

As distribuições Linux e o Mac OS X já possuem uma instalação bastante completa de Python e instalar o Django é rápido e fácil nesses ambientes.

Como o Django suporta “oficialmente” os servidores Web e de banco de dados mais comuns no mundo open-source (Apache, nginx, lighttpd, MySQL, PostgreSQL, etc) a documentação dele está repleta de exemplos sobre como fazer um deploy nesses ambientes.

Mas e se você trabalha num ambiente onde a plataforma da Microsoft é usada intensamente? E se você usa o IIS como servidor Web e o SQL Server como banco de dados relacional, seria possível usar o Django?

A resposta é sim, mas por não ser suportado “oficialmente” a configuração desses ambientes não é muito documentada nem é muito simples (ao menos pra nós que não trabalhamos intensamente com a plataforma da Microsoft).

Vamos descrever os passos necessários para colocar esse ambiente “no ar”.

Baixando e instalando o Python

O jeito mais fácil de instalar o Python na plataforma Windows é com o ActivePython distribuido pela ActiveState. Além da instalação padrão do Python essa distribuição inclui módulos e bibliotecas muito úteis no ambiente Windows.

Nota, a versão recomendada é a Active Python 2.5. Os screenshots são meramente ilustrativos

Site para Download do Active Python da ActiveState

Active Python da ActiveState

Acessando o site e clicando no link para download você será encaminhado para um formulário cujo preenchimento é opcional e o download será iniciado.

Tela com Formulário cujo preenchimento é opcional

Formulário cujo preenchimento é opcional

Assim que o download terminar é só executar o instalador e seguir as instruções.

Seguindo as instruções do instalador

Seguindo as instruções do instalador

Instalando o Django e suas dependências

Para facilitar o trabalho, a Triveos desenvolveu um instalador que já instala o Django e outros pacotes necessários (que funciona APENAS com o Active Python 2.5) Baixe-o aqui

Mas se desejar instar o Django manualmente continue lendo.

O procedimento para instalar o Django e parte de suas dependências segue no “Prompt de Comandos”. O ActivePython já colocou os diretórios do Python no PATH do sistema e instalou as ferramentas necessárias para baixar e instalar o Django e suas dependências (setuptools/easy_install/pip).

Agora é só a gente criar um ambiente isolado de trabalho (que chamaremos de ‘gerenciador’) com o virtualenv e instalar o Django com o pip.

Instalando o Django

Instalando o Django

C:Usersusuario> virtualenv gerenciador
C:Usersusuario> cd gerenciador
C:Usersusuariogerenciador> Scriptsactivate.bat
(gerenciador) C:Usersusuariogerenciador> pip install django

Criando um projeto Django

Com o que a gente já fez é possível iniciar um projeto Django que, posteriormente, armazenara seus dados num servidor SQL Server e será acessível através de um servidor IIS. Esse projeto também se chamará ‘gerenciador’ e será criado dentro do nosso ambiente virtual que tem o mesmo nome: “C:Usersusuariogerenciadorgerenciador“.

Criando o projeto 'gerenciador'

Criando o projeto

(gerenciador) C:Usersusuariogerenciador> python Scriptsdjango-admin.py startproject gerenciador
(gerenciador) C:Usersusuariogerenciador> cd gerenciador
(gerenciador) C:Usersusuariogerenciadorgerenciador>

Configurando o acesso ao SQL Server

Para que seja possível acessar um banco de dados SQL Server a partir de uma aplicação feita em Django é necessário instalar o backend do mesmo já que ele não faz parte da instalação padrão do Django. O projeto que implementa esse backend fica no endereço: http://code.google.com/p/django-mssql/.

Para que o backend funcione é necessário colocar o diretório “[django-mssql]/source/sqlserver_ado/” em um caminho do PYTHONPATH. No nosso caso vamos colocá-lo dentro do diretório do nosso próprio projeto. Para facilitar o nosso trabalho é só baixar o arquivo com o backend e descompactá-lo dentro do diretório do nosso projeto Django.

Criando o banco de dados

Criando o banco de dados

Crie o banco de dados que será usado por nossa aplicação no SQL Server e certifique-se de usar a autenticação por senha e não a autenticação Windows (que não é suportada pelo backend).

Banco de dados "django" criado

Banco de dados

Agora é só configurar a conexão no arquivo settings.py do nosso projeto.

Configuração do projeto

Configuração do projeto

Assim que a gente rodar um python manage.py syncdb

Rodando o "syncdb"

Rodando o

… as tabelas serão criadas no banco de dados.

Tabelas prontas para serem usadas

Tabelas prontas para serem usadas

Configurando o IIS

Devo confessar que essa foi a parte mais complicada do trabalho!

Antes de instalar o seu projeto no IIS teste-o usando o manage.py.

Para facilitar o trabalho, a Triveos desenvolveu um instalador (que funciona APENAS com o Active Python 2.5) Baixe-o aqui

Este instalador instala o Django e todas os pacotes necessários (django-mssql e isapi-wsgi). Exige o Active Python 2.5

Após instalado, faça da seguinte forma:

1 – crie o diretório que vai receber o seu projeto no IIS (pode ser dentro do c:inetpub)
2 – crie o arquivo handler de WSGI neste diretório, assim:

import os, sys 

#inclua aqui o caminho para o seu projeto
#é comum incluir o caminho para o diretório do projeto e seu pai
sys.path.append('C:\django_projects')
sys.path.append('C:\django_projects\example_project') 

#configure aqui para apontar para o arquivo de settings de seu projeto
os.environ['DJANGO_SETTINGS_MODULE'] = 'example_project.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler() 

import isapi_wsgi
# The entry points for the ISAPI extension.
def __ExtensionFactory__():
    return isapi_wsgi.ISAPISimpleHandler(application)

3 – salve o arquivo com algum nome (por exemplo, wsgi.py)
4 – Busque dentro do diretório do Python o arquivo PyISAPI_loader.dll (normalmente em C:Python25Libsite-packagesisapi). Copie-a para o diretório com o mesmo nome do arquivo .py (com extensão .dll) mas precedido de um caracter ‘_’ (underscore). Assim, se o arquivo foi salvo como wsgi.py, copie a dll e a renomeie para _wsgi.dll
5 – Para os diretórios de media e admin_media, você deverá incluir Virtual Directories do IIS apontando para eles

Virtual dirs para admin media

6 – Finalmente crie os mapeamentos da seguinte forma:

Nas configurações do site, em Handler Mappings adicione um Script Map da seguinte forma:
-Request Path: *
-Executable: aponte para a .dll dentro do diretório
-Nome: como desejado

Crie um mapeamento para StaticFileModule para os caminhos que apontam para os virtual dirs. Infelizmente é necessário criar um mapeamento para todos os subdiretórios. (ou seja, é necessário criar um mapeamento para admin_media/css/*, admin_media/js/* admin_media/img/*)

Module mappings não ordenados

Ordene os mapeamentos colocando os de media primeiro e o Script Map por último.

Se tudo der certo o seu site está funcionando no IIS agora!

  • Rodrigo

    Olá, estamos aguardando a continuação do tutorial.. muito bom 🙂

  • Rodrigo

    Olá gostei muito do tutorial, porém tenho uma ressalva a fazer o virtualenv não acompanhara versão do ActivePython-2.5.5.7-win32-x86 que agora é descrita com a melhor para rodar o IIS. Ou seja o usuario partindo do zero não consegue cumprir a primeira parte do tutorial.