.. .. META INFORMATION OF TRANSLATION .. .. $TranslationStatus: Done $ .. $OriginalRevision: 11348 $ .. $TranslationAuthors: Anderson Santos, semente $ .. .. INFO OF THIS FILE (DO NOT EDIT! UPDATED BY SUBVERSION) .. .. $HeadURL$ .. $LastChangedRevision$ .. $LastChangedBy$ .. $LastChangedDate$ .. .. _intro-tutorial02: ================================================= Escrevendo sua primeira aplicação Django, parte 2 ================================================= Este tutorial inicia-se onde o :ref:`Tutorial 1 ` terminou. Vamos continuar a aplicação web de enquete focando agora no site de administração automática do Django. .. admonition:: Filosofia Gerar sites de administração para sua equipe ou clientes adicionarem, editarem ou excluírem conteúdo é um trabalho entediante que não requer muita criatividade. Por essa razão, o Django automatiza toda a criação da interface de administração para os models. O Django foi desenvolvido em um ambiente de redação, onde havia uma clara separação entre "produtores de conteúdo" e o site "público". Gerentes de site usam o sistema para adicionar notícias, eventos, resultado de esportes, etc, e o conteúdo é exibido no site público. O Django soluciona o problema de criar uma interface unificada para os administradores editarem o conteúdo. A administração não foi desenvolvida necessariamente para ser usada pelos visitantes do site, mas sim pelos gerentes. Ative o site de administração do Django ======================================= O site de administração não vem ativado por padrão -- ele é opcional. Para ativá-lo para sua instalação, siga estes três passos: * Adicione ``"django.contrib.admin"`` às suas configurações de :setting:`INSTALLED_APPS`. * Execute ``python manage.py syncdb``. Já que uma nova aplicação foi adicionada ao :setting:`INSTALLED_APPS`, as tabelas do banco de dados precisam ser atualizadas. * Edite seu arquivo ``meusite/urls.py`` e retire o comentário das linhas abaixo de "Uncomment the next two lines...". Esse arquivo é um URLconf; entraremos em detalhes sobre URLconfs no próximo tutorial. Por enquanto, tudo o que você tem que saber é que ele mapeia as URLs principais para as aplicações. No final você deve ter um ``urls.py`` parecido com este: .. parsed-literal:: from django.conf.urls.defaults import * # Uncomment the next two lines to enable the admin: **from django.contrib import admin** **admin.autodiscover()** urlpatterns = patterns('', # Example: # (r'^mysite/', include('mysite.foo.urls')), # Uncomment the admin/doc line below and add 'django.contrib.admindocs' # to INSTALLED_APPS to enable admin documentation: # (r'^admin/doc/', include('django.contrib.admindocs.urls')), # Uncomment the next line to enable the admin: **(r'^admin/(.*)', admin.site.root),** ) (As linhas em negrito são as que precisam ser descomentadas.) Inicie o servidor de desenvolvimento ==================================== Vamos iniciar o servidor de desenvolvimento e explorar o site de administração. Lembre-se do Tutorial 1 onde você iniciou o servidor com: .. code-block:: bash python manage.py runserver Agora, abra o navegador de internet e vá para "/admin/" no seu domínio local -- e.g., http://127.0.0.1:8000/admin/. Você deverá ver a tela de login: .. image:: _images/admin01.png :alt: Tela de login do Django admin Entre no site de administração ============================== Agora tente acessar o sistema. (Você criou uma conta de superusuário na primeira parte deste tutorial, lembra? Se você não criou ou esqueceu a senha você pode :ref:`criar novamente `.) Você deverá ver a página inicial do admin do Django: .. image:: _images/admin02t.png :alt: Página inicial do Django admin Você deverá ver alguns outros tipos de conteúdos editáveis, incluindo grupos, usuários e sites. Essas são as funcionalidades centrais que o Django inclui por padrão. Torne a aplicação de enquetes editável no site de administração =============================================================== Mas onde está nossa aplicação de enquete? Ela não está visível na página principal do admin. Apenas uma coisa a ser feita: Nós temos que dizer para o site de administração que os objetos "Poll" possuem uma interface de administração. Para fazer isto, crie um arquivo chamado ``admin.py`` em seu diretório ``polls``, e edite para que se pareça com isto:: from mysite.polls.models import Poll from django.contrib import admin admin.site.register(Poll) Você precisará reiniciar o servidor de desenvolvimento para ver suas modificações. Normalmente, o servidor recarrega automaticamente toda a vez que você modifica um arquivo, mas a ação de criar um novo arquivo não dispara a lógica de recarga automática. Explore de graça a funcionalidade de administração ================================================== Agora que nós registramos ``Poll``, o Django sabe que ela deve ser exibida na página principal do site de administração: .. image:: _images/admin03t.png :alt: Página principal de administração, agora com as enquetes exibidas Clique em "Polls". Agora você está na página "change list" (lista de edição) para as enquetes. Essa página exibe todas as enquetes do banco de dados e deixa que você escolha uma para alterar. Existe a enquete "What's up?" criada no primeiro tutorial: .. image:: _images/admin04t.png :alt: Lista de edição de enquetes Clique na enquete "What's up?" para editá-la: .. image:: _images/admin05t.png :alt: Formulário de edição para a enquete Note que: * O formulário é gerado automaticamente para o model Poll. * Os diferentes tipos de campos (:class:`~django.db.models.DateTimeField`, :class:`~django.db.models.CharField`) correspondem aos respectivos widgets HTML de inserção. Cada tipo de campo sabe como se exibir no site de administração do Django. * Cada :class:`~django.db.models.DateTimeField` ganha um atalho JavaScript de graça. Datas possuem um atalho "Hoje" e um calendário popup, e horas têm um atalho "Agora" e um conveniente popup com listas de horas utilizadas comumente. A parte inferior da página fornece uma série de opções: * Salvar -- Salva as alterações e retorna à change list para este tipo de objeto. * Salvar e continuar editando -- Salva as alterações e retorna à página para este objeto. * Salvar e adicionar outro -- Salva as informações e abre um formulário em branco para este tipo de objeto. * Deletar -- Exibe uma página de confirmação de exclusão. Altere a "Publication date" clicando nos atalhos "Hoje" e "Agora". Em seguida, clique em "Salvar e continuar editando." Então clique em "Histórico" no canto superior direito. Você verá uma página exibindo todas as alterações feitas neste objeto pelo site de administração do Django, com a hora e o nome de usuário da pessoa que fez a alteração: .. image:: _images/admin06t.png :alt: Página de histórico para o objeto Poll. Personalize o formulário de administração ========================================= Tire alguns minutos para apreciar todo o código que você não teve que escrever. Ao registrar o model Poll com ``admin.site.register(Poll)``, o Django foi capaz de construir uma representação de formulário padrão. Frequentemente, você desejará controlar como o site de administração se parecerá e funcionará. Você fará isso informando ao Django sobre as opções que você quer quando registra o objeto. Vamos ver como isso funciona reordenando os campos no formulário de edição. Substitua a linha ``admin.site.register(Poll)`` por:: class PollAdmin(admin.ModelAdmin): fields = ['pub_date', 'question'] admin.site.register(Poll, PollAdmin) Você seguirá este padrão -- crie um objeto "model admin" e então o passe como segundo argumento para o ``admin.site.register()`` -- sempre que precisar alterar as opções do admin para um objeto. Essa mudança específica no código acima faz com que a "Publication date" apareça antes do campo "Question": .. image:: _images/admin07.png :alt: Os campos foram reordenados Isso não é impressionante com apenas dois campos, mas para formulários com dúzias deles, escolher uma ordem intuitiva é um detalhe importante para a usabilidade. E por falar em dúzias de campos, você pode querer dividir o formulário em grupos (fieldsets):: class PollAdmin(admin.ModelAdmin): fieldsets = [ (None, {'fields': ['question']}), ('Date information', {'fields': ['pub_date']}), ] admin.site.register(Poll, PollAdmin) O primeiro elemento de cada tupla em ``fieldsets`` é o título do grupo. Aqui está como o nosso formulário se aparenta agora: .. image:: _images/admin08t.png :alt: O formulário possui grupos para campos agora Você pode atribuir classes HTML arbitrárias para cada grupo. O Django fornece uma classe ``"collapse"`` que exibe um grupo particular inicialmente recolhido. Isso é útil quando você tem um formulário longo que contém um grupo de campos que não são comumente utilizados:: class PollAdmin(admin.ModelAdmin): fieldsets = [ (None, {'fields': ['question']}), ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}), ] .. image:: _images/admin09.png :alt: Fieldset inicialmente recolhido Adicionando objetos relacionados ================================ OK, temos nossa página de administração de Enquetes. Mas uma ``Poll`` tem múltiplas ``Choices``, e a página de administração não exibe as opções. Ainda. Há duas formas de solucionar esse problema. A primeira é registrar ``Choice`` no site de administração, assim como fizemos com ``Poll``. Isto é fácil:: from mysite.polls.models import Choice admin.site.register(Choice) Agora "Choices" é uma opção disponível no site de administração do Django. O formulário de "Add choice" se parece com isto: .. image:: _images/admin10.png :alt: Página de admininitracao para Choice Nesse formulário, o campo "Poll" é uma caixa de seleção contendo todas as enquetes no banco de dados. O Django sabe que uma :class:`~django.db.models.ForeignKey` deve ser representada no site de administração como um campo ``