Resumo : neste tutorial, você aprenderá como criar uma nova aplicação em um projeto Django, como definir visualizações e mapear as visualizações com URLs.
Este tutorial começa onde o tutorial Introdução ao Django parou.
Projetos e aplicativos Django
Na estrutura Django:
- Um projeto é uma instalação do Django com algumas configurações.
- Um aplicativo é um grupo de modelos, visualizações, modelos e URLs.
Um projeto Django pode ter uma ou mais aplicações. Por exemplo, um projeto é como um site que pode consistir em vários aplicativos, como blogs, usuários e wikis.
Normalmente, você projeta um aplicativo Django que pode ser reutilizável em outros projetos Django. A figura a seguir mostra a estrutura de um projeto Django e suas aplicações:
Criando um aplicativo de blog
Para criar um aplicativo, você usa o startapp
comando da seguinte forma:
python manage.py startapp app_name
Linguagem de código: CSS ( css )
Por exemplo, você pode criar um aplicativo chamado blog
usando o startapp
comando como este:
python manage.py startapp blog
Linguagem de código: CSS ( css )
O comando cria um blog
diretório com alguns arquivos:
├── blog
| ├── admin.py
| ├── apps.py
| ├── migrations
| ├── models.py
| ├── tests.py
| ├── views.py
| └── __init__.py
├── db.sqlite3
├── django_project
| ├── asgi.py
| ├── settings.py
| ├── urls.py
| ├── wsgi.py
| ├── __init__.py
| └── __pycache__
└── manage.py
Linguagem de código: texto simples ( texto simples )
Registrando um aplicativo
Depois de criar um aplicativo, você precisa registrá-lo no projeto, especialmente quando o aplicativo usa modelos e interage com um banco de dados.
O blog
aplicativo possui o apps.py
módulo que contém a BlogConfig
classe assim:
from django.apps import AppConfig
class BlogConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'blog'
Linguagem de código: Python ( python )
Para registrar o blog
aplicativo, você adiciona a blog.apps.BlogConfig
classe à INSTALLED_APPS
lista settings.py
do projeto:
INSTALLED_APPS = [
# ...
'blog.apps.BlogConfig',
]
Linguagem de código: Python ( python )
Alternativamente, você pode usar o nome do aplicativo como blog
na INSTALLED_APPS
lista assim:
INSTALLED_APPS = [
# ...
'blog',
]
Linguagem de código: Python ( python )
Criando uma visualização
O views.py
arquivo no blog
diretório vem com o seguinte código padrão:
from django.shortcuts import render
# Create your views here.
Linguagem de código: Python ( python )
O views.py conterá todas as visualizações do aplicativo. Uma visão é uma função que pega um HttpRequest
objeto e retorna um HttpResponse
objeto. É equivalente ao controlador na arquitetura MVC.
Para criar uma nova visualização, você importa HttpResponse
para django.http
o views.py
arquivo e define uma nova função que aceita uma instância da HttpRequest
classe:
from django.shortcuts import render
from django.http import HttpResponse
def home(request):
return HttpResponse('<h1>Blog Home</h1>')
Linguagem de código: Python ( python )
Neste exemplo, a home()
função retorna um novo HttpResponse
objeto que contém um trecho de código HTML. O código HTML inclui uma h1
tag.
A home()
função aceita uma instância de um HttpRequest
objeto e retorna um HttpResponse
objeto. É chamada de visualização baseada em função. Posteriormente, você aprenderá como criar visualizações baseadas em classes.
Para mapear uma URL com a home()
função, você cria um novo arquivo urls.py
dentro do blog
diretório e adiciona o seguinte código ao urls.py
arquivo:
from django.urls import path
from . import views
urlpatterns = [
path('', views.home, name='posts'),
]
Linguagem de código: Python ( python )
Como funciona.
Primeiro, importe o módulo path
from :django.urls
from django.urls import path
Linguagem de código: Python ( python )
Segundo, importe o views.py
módulo do diretório atual.
from . import views
Linguagem de código: Python ( python )
Observe que esta é uma importação relativa que importa o views
módulo do diretório atual.
Terceiro, defina uma rota que mapeie a URL do blog com a home()
função usando a path()
função.
urlpatterns = [
path('', views.home, name='posts'),
]
Linguagem de código: Python ( python )
O name
argumento da palavra-chave define o nome da rota. Posteriormente, você poderá referenciar o URL usando o nome da rota em vez do URL codificado, como blog/
.
Ao usar o nome do caminho, você pode alterar o URL do caminho para algo como my-blog/
em, urls.py
em vez de alterar o URL codificado em qualquer lugar.
Observe que o argumento final do caminho deve ser um argumento de palavra-chave como name='posts'
. Se você usar um argumento posicional como este:
from django.urls import path
from . import views
urlpatterns = [
path('', views.home, 'posts'), # Error
]
Linguagem de código: Python ( python )
você receberá o seguinte erro:
TypeError: kwargs argument must be a dict, but got str.
Linguagem de código: texto simples ( texto simples )
Para que as rotas do blog funcionem, você precisa incluir o urls.py
da blog
aplicação no urls.py
arquivo do projeto Django:
from django.contrib import admin
from django.urls import path, include # new
urlpatterns = [
path('admin/', admin.site.urls),
path('blog/', include('blog.urls')), # new
]
Linguagem de código: Python ( python )
No urls.py
projeto, importamos a include
função do django.urls
e mapeamos o caminho do blog para o arquivo blog.urls
.
Fazendo isso, ao navegar para http://127.0.0.1:8000/blog/
, o Django executará a home()
função do views.py
módulo e retornará uma página web que exibe uma h1
tag.
Antes de abrir a URL, você precisa iniciar o servidor web de desenvolvimento Django:
python manage.py runserver
Linguagem de código: Python ( python )
Ao navegar até http://127.0.0.1:8000/blog/
, você verá uma página da Web que exibe o Blog Home
título.
Aqui está o fluxo:
- Primeiro, o navegador da web envia uma solicitação HTTP para o URL
http://127.0.0.1:8000/blog/
- Segundo, o Django executa
urls.py
nodjango_project
diretório. Ele correspondeblog/
ao URL naurlpatterns
lista no arquivourls.py
. Como resultado, ele envia''
para ourls.py
aplicativoblog
. - Terceiro, o Django executa o
urls.py
arquivo nablog
aplicação. Ele combina o''
URL com aviews.home
função e a executa, que retorna uma resposta HTTP que gera umah1
tag. - Finalmente, o Django retorna uma página web para o navegador web.
Adicionando mais rotas
Primeiro, defina a about()
função no views.py
aplicativo blog
:
from django.shortcuts import render
from django.http import HttpResponse
def home(request):
return HttpResponse('<h1>Blog Home</h1>')
def about(request):
return HttpResponse('<h1>About</h1>')
Linguagem de código: Python ( python )
Segundo, adicione uma rota ao urls.py
arquivo:
from django.urls import path
from . import views
urlpatterns = [
path('', views.home, name='posts'),
path('about/', views.about, name='about'),
]
Linguagem de código: Python ( python )
Terceiro, abra o URL http://127.0.0.1:8000/blog/about/
e você verá uma página que exibe a página Sobre.
Agora, se você abrir o URL inicial, verá uma página que exibe uma página não encontrada com um código de status HTTP 404.
O motivo é que urls.py
in the django_project
não possui nenhuma rota que mapeie o URL inicial com uma visualização.
Para tornar o aplicativo do blog a página inicial, você pode alterar a rota de blog/
para ''
da seguinte forma:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('blog.urls')),
]
Linguagem de código: Python ( python )
Se você abrir o URL http://127.0.0.1:8000
, verá a página inicial do blog. E navegar até o URL http://127.0.0.1:8000/about/
o levará para a página Sobre.
Baixe o código fonte do Projeto Django
Resumo
- Um projeto Django contém uma ou mais aplicações.
- Um aplicativo Django é um grupo de modelos, visualizações, modelos e URLs.
- Use
python manage.py startapp app_name
o comando para criar um novo aplicativo Django. - Defina uma função no
views.py
arquivo para criar uma visualização baseada em função. - Defina uma rota no
urls.py
arquivo da aplicação para mapear um padrão de URL com uma função de visualização. - Use a
include()
função para incluir ourls.py
aplicativo nourls.py
projeto.