Aula 04 – Curso básico de Django
Criando uma primeira aplicação com Django no Ubuntu continuação.
Criando uma aplicação de pesquisas ou enquetes (polls)
Agora que o ambiente e um “projeto” estão configurados, você está pronto para começar.
Cada aplicativo que você escreve no Django consiste em um pacote Python que segue uma determinada convenção.
O Django vem com um utilitário que gera automaticamente a estrutura de diretórios básica de um aplicativo, para que você possa se concentrar em escrever o código ao invés de criar diretórios.
Projetos versus aplicativos
Qual a diferença entre um projeto e um app?
Um app é um aplicativo Web que faz algo – por exemplo, um sistema Weblog, um banco de dados de registros públicos ou um aplicativo de pesquisa simples.
Um projeto é uma coleção de configurações e aplicativos para um site específico.
Um projeto pode conter vários aplicativos. Um aplicativo pode estar em vários projetos.
Seus aplicativos podem ficar em qualquer lugar no path do Python.
Neste tutorial criaremos nosso aplicativo de pesquisa usando diretamente o arquivo manage.py do projeto mysite, para que possa ser importado como seu próprio módulo de nível superior, em vez de um submódulo de mysite.
Para criar o aplicativo, verifique se você está no mesmo diretório que manage.py e digite este comando:
python manage.py startapp polls
CASO OCORRA PROBLEMA COM SQLITE3
//Problema com sqlite3 (no module named '_sqlite3') resovido com os comandos
//Passo1 instala os pacotes necessários
sudo apt-get install build-essential checkinstall
sudo apt-get install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev
//Passo2 download o python3.5.2
cd /usr/src
wget https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz
//unzipa o tgz
sudo tar xzf Python-3.5.2.tgz
//Passo3 Compila o fonte do python
cd Python-3.5.2
sudo ./configure
sudo make altinstall
//O altinstall é usado para evitar a substituição do arquivo binário python padrão /usr/bin/python
Isso criará arquivos e diretórios automaticamente:
polls/ __init__.py admin.py apps.py migrations/ __init__.py models.py tests.py views.py
Essa estrutura de diretório abrigará o app de pesquisa.
Agora vamos escrever uma View:
Abra o arquivo polls/views.py e insira o seguinte código Python nele:
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world. You're at the polls index.")
Esta é a view mais simples possível no Django.
Para chamar a view precisamos mapeá-la para um URL – e para isso precisamos de um URLconf.
Para criar um URLconf no diretório de polls, crie um arquivo chamado urls.py.
No arquivo polls/urls.py, inclua o seguinte código:
from django.contrib import admin
from django.urls import path
urlpatterns = [
path('admin/', admin.site.urls),
]
Ou se quiser usar a implementação mais antiga com url() e regex, coloque o conteúdo abaixo no polls/urls.py:
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.index, name='index'),
]
O próximo passo é apontar para a raiz do URLconf no módulo polls.urls.
Em mysite/urls.py, adicione uma importação para django.conf.urls.include e insira um include () na lista urlpatterns, então o mysite/urls.py fica assim:
from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
]
Para a função url () são passados quatro argumentos, dois necessários: regex e view, e dois opcionais: kwargs e name.
Neste ponto, vale a pena analisar o que são esses argumentos.
Regex (primeiro argumento de url()):
o termo “regex” é uma forma curta comumente usada que significa “expressão regular”, que é uma sintaxe para combinar padrões em strings, neste caso, padrões de url. O Django começa na primeira expressão regular e segue o caminho para baixo, comparando a URL solicitada com cada expressão regular até encontrar um que corresponda.
A função include () permite referenciar outros URLconfs.
Observe que as expressões regulares para a função include () não possuem $ (character de fim-de-string), mas sim uma barra diagonal.
Sempre que o Django encontra um include (), ele escolhe qualquer parte do URL correspondente até esse ponto e envia a sequência restante ao URLconf incluído para posterior processamento.
Observe que essas expressões regulares não pesquisam parâmetros GET e POST, nem o nome de domínio.
Por exemplo, em uma solicitação para:
https://www.example.com/myapp/
O URLconf procurará myapp /
Em uma solicitação para:
https://www.example.com/myapp/?page=3
O URLconf também procurará myapp /
As expressões regulares são compiladas na primeira vez que o módulo URLconf é carregado. Eles são super rápidos (desde que as pesquisas não sejam muito complexas).
A idéia por trás include () é usar URLs plug-and-play.
Uma vez que as pesquisas estão em seu próprio URLconf (polls/urls.py), elas podem ser colocadas em “/polls/”, ou em “/fun_polls/”, ou em “/content/polls /” ou qualquer outra raiz do caminho e o aplicativo continuará ainda funcionando.
view (segundo argumento da url()):
Quando o Django encontra uma correspondência de expressão regular, o Django chama a função view especifica, com um objeto HttpRequest como o primeiro argumento e quaisquer valores “capturados” da expressão regular como outros argumentos.
Se o regex usa capturas simples, os valores são passados como argumentos posicionais;
Se ele usa capturas por nome, os valores são passados como argumentos de palavras-chave.
kwargs (terceiro argumento de url(), é opcional):
Os argumentos arbitrários de palavras-chave podem ser passados em um dicionário para a view de destino.
name (quarto argumento de url(), é opcional):
Nomear sua URL permite que você referencie ela de forma inequívoca de qualquer lugar no Django especialmente nos templates.
Este poderoso recurso permite que você faça alterações globais nos padrões de URL (URL patterns) do seu projeto alterando apenas um único arquivo.
Quando usar o include ()?
Quando você incluir outros URLs patterns.
admin.site.urls é a única exceção para isso (não precisa usar o include).
Você já conectou um index view no URLconf, vamos verificar se está funcionando, execute o seguinte comando:
python manage.py runserver
Acesse no seu navegador:
http://localhost:8000/polls/
Você deverá ver o texto “Hello, world. You’re at the polls index. “, que você definiu no index view.