Aula 03 – Curso básico de Django

Criando uma primeira aplicação com Django

Criando uma primeira aplicação com Django

Criando uma primeira aplicação com Django

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.

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.urls import path

from . import views

urlpatterns = [
    path('', views.index, name='index'),
]

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 de 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'^polls/', include('polls.urls')),
   url(r'^admin/', admin.site.urls),
]

Ou também, ao invés de usar url no mysite/urls.py, você pode usar path, que é a forma mais atual e simples de fazer, sem a necessidade de usar regex:


from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('polls/', include('polls.urls')),
    path('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.

Para baixar o código como está até agora, acesse o meu github no link abaixo:
https://github.com/toticavalcanti/django_course/tree/create_app

AULA  02

AULA  04

Todas as Aulas da App Polls

Página Principal

Obrigado

Até a próxima

Aula 03 – Criando uma primeira aplicação com Django

About The Author
-

8 Comentários

  • Adolfo
    Reply

    Oi,
    Estou começando e fiz o teu exemplo e dá este erro:
    Page not found (404)
    Request Method: GET
    Request URL: http://127.0.0.1:8000/polls
    Using the URLconf defined in mysite.urls, Django tried these URL patterns, in this order:

    ^admin/
    The current path, polls, didn’t match any of these.

    You’re seeing this error because you have DEBUG = True in your Django settings file. Change that to False, and Django will display a standard 404 page.

    Valeu

  • Adolfo
    Reply

    Oi Está dando este erro
    Page not found (404)
    Request Method: GET
    Request URL: http://127.0.0.1:8000/polls
    Using the URLconf defined in mysite.urls, Django tried these URL patterns, in this order:

    ^admin/
    The current path, polls, didn’t match any of these.

    You’re seeing this error because you have DEBUG = True in your Django settings file. Change that to False, and Django will display a standard 404 page.

    • toticavalcanti
      Reply

      Olá Adolfo, você tá tentando acessar http://127.0.0.1:8000/polls:
      Page not found (404)
      Request Method: GET
      Request URL: http://127.0.0.1:8000/polls
      Essa rota /polls ainda não está definida em mysite/urls.py, pelo menos até essa aula, a única rota definida até agora é:
      /admin

      Tenta acessar assim:
      127.0.0.1:8000/admin

      Qualquer coisa me fala.
      Abs.
      Toti 🙂

    • toticavalcanti
      Reply

      Olá Adolfo, você tá tentando acessar http://127.0.0.1:8000/polls:
      Page not found (404)
      Request Method: GET
      Request URL: http://127.0.0.1:8000/polls
      Essa rota /polls ainda não está definida em mysite/urls.py, pelo menos até essa aula, a única rota definida até agora é:
      /admin

      Tenta acessar assim:
      127.0.0.1:8000/admin

      Qualquer coisa me fala.
      Abs.
      Toti ?

    • toticavalcanti
      Reply

      Fala Adolfo, Blz? Tenta só 127.0.0.1 ou seja, localhost. De qualquer forma, não se preocupe com isso por enquanto, vai seguindo as aulas. Abs. 🙂

    • toticavalcanti
      Reply

      Adolfo, no mysite/urls.py tava faltando a rota polls (url(r’^polls/’, include(polls.urls)), já corrigi no post, então o mysite/urls.py pode ficar de duas maneiras.

      implementação mais antiga, usando regex:

      from django.conf.urls import url
      from django.contrib import admin

      urlpatterns = [
      url(r’^admin/’, admin.site.urls),
      url(r’^polls/’, include(polls.urls)),
      ]

      Ou a forma mais atual:

      from django.contrib import admin
      from django.urls import include, path

      urlpatterns = [
      path(‘polls/’, include(‘polls.urls’)),
      path(‘admin/’, admin.site.urls),
      ]

      Valeu, abraço.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>