línguas
O Django é um framework web do lado do servidor extremamente popular e
cheio de recursos, escrito em Python. O módulo mostra por que o Django é uma
das estruturas de servidor da Web mais populares, como configurar um
ambiente de desenvolvimento e como começar a usá-lo para criar seus próprios
aplicativos da web.
Pré-requisitosSeção
Antes de iniciar este módulo, você não precisa ter nenhum conhecimento do
Django. Idealmente, você precisaria entender o que é a programação da Web
do lado do servidor e os frameworks da Web lendo os tópicos em nosso módulo
de primeiros passos de programação do site do lado do servidor .
Um conhecimento geral de conceitos de programação e Python é
recomendado, mas não é essencial para entender os principais conceitos.
Nota : O Python é uma das linguagens de programação mais fáceis para os
novatos lerem e entenderem. Dito isto, se você quiser entender melhor este
módulo, existem inúmeros livros gratuitos e tutoriais disponíveis na Internet
para ajudá-lo. (novos programadores podem querer verificar a página Python
for Non Programmers no wiki python.org).
GuiasSeção
Introdução ao Django
Neste primeiro artigo do Django nós respondemos a pergunta "O que é o
Django?" e dar-lhe uma visão geral do que torna este framework web
especial. Vamos descrever os principais recursos, incluindo algumas
funcionalidades avançadas que não teremos tempo para abordar
detalhadamente neste módulo. Também mostraremos alguns dos
principais blocos de construção de uma aplicação Django, para lhe dar
uma ideia do que ela pode fazer antes de configurá-la e começar a jogar.
Introdução ao Django
línguas
Visão geral: DjangoNext
Completo
O Django segue a filosofia "Baterias incluídas" e fornece quase tudo que
os desenvolvedores podem querer fazer "fora da caixa". Como tudo que
você precisa é parte do "produto", tudo funciona perfeitamente em
conjunto, segue princípios de design consistentes e possui uma
documentação extensa e atualizada .
Versátil
O Django pode ser (e tem sido) usado para construir praticamente
qualquer tipo de site - desde sistemas de gerenciamento de conteúdo e
wikis até redes sociais e sites de notícias. Ele pode trabalhar com
qualquer estrutura do lado do cliente e pode fornecer conteúdo em
praticamente qualquer formato (incluindo HTML, feeds RSS, JSON, XML,
etc.). O site que você está lendo atualmente é baseado no Django!
Seguro
O Django ajuda os desenvolvedores a evitar muitos erros comuns de
segurança, fornecendo uma estrutura que foi projetada para "fazer as
coisas certas" para proteger o site automaticamente. Por exemplo, o
Django fornece uma maneira segura de gerenciar contas de usuário e
senhas, evitando erros comuns, como colocar informações de sessão em
cookies vulneráveis (em vez disso, os cookies contêm apenas uma
chave e os dados reais são armazenados no banco de dados) ou
armazenando senhas diretamente em vez de um hash de senha.
Os sites de alto perfil que usam o Django incluem: Disqus, Instagram, Fundação
Knight, Fundação MacArthur, Mozilla, National Geographic, Open Knowledge
Foundation, Pinterest e Open Stack (fonte: home page do Django ).
Django é opinativo? Seção
Estruturas da Web muitas vezes se referem a si mesmas como "opinativas" ou
"não publicadas".
Quadros opinativos são aqueles com opiniões sobre o "caminho certo" para
lidar com qualquer tarefa específica. Eles geralmente suportam o rápido
desenvolvimento em um domínio particular (resolvendo problemas de um tipo
particular) porque o jeito certo de fazer qualquer coisa é geralmente bem
entendido e bem documentado. No entanto, eles podem ser menos flexíveis na
solução de problemas fora de seu domínio principal e tendem a oferecer menos
opções para quais componentes e abordagens podem usar.
Estruturas não pintadas, em contraste, têm muito menos restrições sobre a
melhor maneira de unir os componentes para atingir uma meta, ou até mesmo
quais componentes devem ser usados. Eles tornam mais fácil para os
desenvolvedores usar as ferramentas mais adequadas para concluir uma tarefa
específica, mesmo que você precise encontrar esses componentes por conta
própria.
URLs: Embora seja possível processar solicitações de cada URL única por
meio de uma única função, é muito mais fácil gravar uma função de exibição
separada para manipular cada recurso. Um mapeador de URLs é usado para
redirecionar solicitações HTTP para a visualização apropriada com base no
URL da solicitação. O mapeador de URLs também pode corresponder a
padrões específicos de cadeias ou dígitos que aparecem em um URL e
transmiti-los a uma função de visualização como dados.
Visualização: Uma exibição é uma função de manipulador de solicitações, que
recebe solicitações HTTP e retorna respostas HTTP. Exibições acessam os
dados necessários para satisfazer solicitações por meio de modelos e delegam
a formatação da resposta a modelos .
Modelos: os modelos são objetos do Python que definem a estrutura dos
dados de um aplicativo e fornecem mecanismos para gerenciar (adicionar,
modificar, excluir) e consultar registros no banco de dados.
Modelos: um modelo é um arquivo de texto que define a estrutura ou o layout
de um arquivo (como uma página HTML), com espaços reservados usados para
representar o conteúdo real. Uma visualização pode criar dinamicamente uma
página HTML usando um modelo HTML, preenchendo-a com dados de
um modelo . Um modelo pode ser usado para definir a estrutura de qualquer
tipo de arquivo; não precisa ser HTML!
Nota : O Django refere-se a esta organização como a arquitetura "Model View
Model (MVT)". Ele tem muitas semelhanças com a arquitetura mais familiar
do Model View Controller .
As seções abaixo lhe darão uma idéia de como essas partes principais de um
aplicativo do Django se parecerão (mais detalhadamente mais adiante no curso,
assim que configurarmos um ambiente de desenvolvimento).
def index(request):
# Get an HttpRequest - the request parameter
# perform operations using information from the request.
# Return HttpResponse
return HttpResponse('Hello from Django!')
class Team(models.Model):
team_name = models.CharField(max_length=40)
TEAM_LEVELS = (
('U09', 'Under 09s'),
('U10', 'Under 10s'),
('U11', 'Under 11s'),
... #list other team levels
)
team_level = models.CharField(max_length=3, choices=TEAM_LEVELS,
default='U11')
Então, por exemplo, aqui temos uma Teamclasse, que deriva daModelclasse. Isso
significa que é um modelo e conterá todos os métodos de um modelo, mas
também podemos fornecer recursos especializados próprios. Em nosso modelo,
definimos os campos que nosso banco de dados precisará armazenar nossos
dados, dando-lhes nomes específicos. O Django usa essas definições, incluindo
os nomes dos campos, para criar o banco de dados subjacente.
def index(request):
list_teams = Team.objects.filter(team_level__exact="U09")
context = {'youngest_teams': list_teams}
return render(request, '/best/index.html', context)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Home page</title>
</head>
<body>
{% if youngest_teams %}
<ul>
{% for team in youngest_teams %}
<li>{{ team.team_name }}</li>
{% endfor %}
</ul>
{% else %}
<p>No teams are available.</p>
{% endif %}
</body>
</html>
Você já viu algum código real do Django acima, mas ao contrário do código do
lado do cliente, você precisa configurar um ambiente de desenvolvimento para
executá-lo. Esse é o nosso próximo passo.
Configurando um ambiente de
desenvolvimento do Django
línguas
AnteriorVisão geral: DjangoNext
Agora que você sabe o que é o Django, mostraremos como configurar e testar
um ambiente de desenvolvimento do Django no Windows, Linux (Ubuntu) e
macOS - qualquer sistema operacional comum que você esteja usando, este
artigo deve fornecer o que você precisa ser capaz de começar a desenvolver
aplicativos do Django.
Pré- Saiba como abrir um terminal / linha de comando. Saiba como instalar pacotes de software
requisitos: no sistema operacional do seu computador de desenvolvimento.
Objetivo: Ter um ambiente de desenvolvimento para o Django (2.0) rodando em seu computador.
Nota : O Python 2.7 não pode ser usado com o Django 2.1 (A série Django 1.11.x
é a última a suportar o Python 2.7).
Quando você instala o Python3, você obtém um único ambiente global que é
compartilhado por todo o código Python3. Embora você possa instalar qualquer
pacote Python que você goste no ambiente, só é possível instalar uma versão
específica de cada pacote por vez.
python3 -V
Python 3.6.6
Seção macOS
O macOS "El Capitan" e outras versões mais recentes não incluem o Python 3.
Você pode confirmar isso executando os seguintes comandos no terminal bash:
python3 -V
-bash: python3: command not found
Seção do Windows 10
O Windows não inclui o Python por padrão, mas você pode instalá-lo facilmente
(junto com a ferramenta pip3 ) em python.org :
1. Baixe o instalador necessário:
1. Vá para https://www.python.org/downloads/
2. Selecione o botão Download Python 3.7.1 (o número exato da versão secundária
pode diferir).
2. Instale o Python clicando duas vezes no arquivo baixado e seguindo os prompts de
instalação
3. Certifique-se de marcar a caixa "Adicionar Python ao PATH"
Você pode então verificar se o Python 3 foi instalado inserindo o seguinte texto
no prompt de comando:
py -3 -V
Python 3.7.1
Nota : O instalador deve configurar tudo o que você precisa para o comando
acima funcionar. Se, no entanto, você receber uma mensagem informando que o
Python não pode ser encontrado, talvez tenha esquecido de adicioná-lo ao
caminho do sistema. Você pode fazer isso executando o instalador novamente,
selecionando "Modificar" e marcando a caixa "Adicionar Python às variáveis de
ambiente" na segunda página.
Usando o Django dentro de um ambiente virtual
PythonSeção
As bibliotecas que usaremos para criar nossos ambientes virtuais
são virtualenvwrapper (Linux e macOS) e virtualenvwrapper-win (Windows),
que por sua vez usam a ferramenta virtualenv . As ferramentas de wrapper
criam uma interface consistente para gerenciar interfaces em todas as
plataformas.
Instalando a seção desoftware do ambiente virtual
Nota :
As variáveis VIRTUALENVWRAPPER_PYTHON e VIRTUALENVWRAPPER_VIRTUALENV_ARGS apon
tam para o local de instalação normal do Python3 e source
/usr/local/bin/virtualenvwrapper.shapontam para o local normal
do virtualenvwrapper.shscript. Se o virtualenv não funcionar quando você testá-
lo, uma coisa é verificar se o Python e o script estão no local esperado (e, em
seguida, alterar o arquivo de inicialização apropriadamente).
source ~/.bashrc
Neste ponto você deve ver um monte de scripts sendo executados como
mostrado abaixo:
Agora você pode criar um novo ambiente virtual com o mkvirtualenv comando.
export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
export PROJECT_HOME=$HOME/Devel
source /usr/local/bin/virtualenvwrapper.sh
export WORKON_HOME=$HOME/.virtualenvs
export
VIRTUALENVWRAPPER_PYTHON=/Library/Frameworks/Python.framework/Versions/3.7/bin
/python3
export PROJECT_HOME=$HOME/Devel
source
/Library/Frameworks/Python.framework/Versions/3.7/bin/virtualenvwrapper.sh
source ~/.bash_profile
Neste ponto, você pode ver um monte de scripts sendo executados (os mesmos
scripts da instalação do Ubuntu). Agora você deve ser capaz de criar um novo
ambiente virtual com o mkvirtualenv comando.
Agora você pode criar um novo ambiente virtual com o mkvirtualenv comando
Criando uma Seção deAmbiente Virtual
Depois de instalar o virtualenvwrapper ou o virtualenvwrapper-win , trabalhar
com ambientes virtuais é muito semelhante em todas as plataformas.
Agora você pode criar um novo ambiente virtual com
o mkvirtualenv comando. Quando este comando for executado, você verá o
ambiente sendo configurado (o que você vê é um pouco específico da
plataforma). Quando o comando concluir o novo ambiente virtual estará ativo -
você pode ver isso porque o início do prompt será o nome do ambiente entre
parênteses (abaixo mostramos isso para o Ubuntu, mas a linha final é
semelhante para Windows / macOS) .
$ mkvirtualenv my_django_environment
Agora você está dentro do ambiente virtual, você pode instalar o Django e
começar a desenvolver.
Nota : De agora em diante neste artigo (e na verdade o módulo), por favor,
assuma que quaisquer comandos são executados dentro de um ambiente virtual
Python como o que configuramos acima.
Usando uma seção deambiente virtual
Há apenas alguns outros comandos úteis que você deve saber (há mais na
documentação da ferramenta, mas esses são os que você usará regularmente):
Instalando o DjangoSeção
Uma vez que você tenha criado um ambiente virtual e chamado workon para
inseri-lo, você pode usar o pip3 para instalar o Django.
pip3 install django
# Linux/macOS
python3 -m django --version
2.1.5
# Windows
py -3 -m django --version
2.1.5
py -m django --version
Você pode então criar um novo site esqueleto chamado " mytestsite " usando
a ferramenta django-admin como mostrado. Depois de criar o site, você pode
navegar até a pasta onde você encontrará o script principal para gerenciar
projetos, chamado manage.py .
django-admin startproject mytestsite
cd mytestsite
You have 15 unapplied migration(s). Your project may not work properly until
you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
Nota : O comando acima mostra o comando Linux / macOS. Você pode ignorar
os avisos sobre "15 migração (ões) não aplicada (s)" neste momento!
Uma vez que o servidor está em execução, você pode ver o site, navegando
para o seguinte URL no seu navegador web local: http://127.0.0.1:8000/. Você
deve ver um site assim:
ResumoSeção
Agora você tem um ambiente de desenvolvimento do Django instalado e
rodando no seu computador.
Na seção de testes, você também viu brevemente como podemos criar um novo
site do Django usando django-admin startprojecte executá-lo em seu
navegador usando o servidor da web de desenvolvimento ( python3 manage.py
runserver). No próximo artigo, expandimos esse processo, criando um aplicativo
da Web simples, mas completo.
Tutorial do Django: o site da
Biblioteca Local
línguas
AnteriorVisão geral: DjangoNext
Objetivo: Apresentar o aplicativo de exemplo usado neste tutorial e permitir que os leitores
entendam quais tópicos serão abordados.
visão globalSeção
Bem-vindo ao tutorial do Django "Biblioteca Local" do MDN, no qual
desenvolvemos um site que pode ser usado para gerenciar o catálogo de uma
biblioteca local.
Este segundo artigo em nosso Tutorial do Django mostra como você pode criar
um projeto de site "esqueleto" como base, que pode ser preenchido com
configurações, caminhos, modelos, visualizações e modelos específicos do site.
Pré- Configure um ambiente de desenvolvimento do Django .Revise
requisitos: o tutorial do Django .
Objetivo: Para poder usar as ferramentas do Django para iniciar seus próprios projetos de
novos sites.
visão globalSeção
Este artigo mostra como você pode criar um site "esqueleto", que pode ser
preenchido com configurações, caminhos, modelos, exibições e modelos
específicos do site (discutiremos isso em artigos posteriores).
O processo é direto:
../django_projects/locallibrary/
A ferramenta cria uma nova pasta e a preenche com arquivos para as diferentes
partes do aplicativo (mostradas em negrito abaixo). A maioria dos arquivos é
nomeada de acordo com sua finalidade (por exemplo, as visualizações devem
ser armazenadas em views.py , modelos em models.py , testes em tests.py ,
configuração do site de administração em admin.py , registro de aplicativos
em apps.py ) e conter algum código clichê mínimo para trabalhar com os
objetos associados.
O diretório do projeto atualizado agora deve ter esta aparência:
locallibrary/
manage.py
locallibrary/
catalog/
admin.py
apps.py
models.py
tests.py
views.py
__init__.py
migrations/
Existem duas outras configurações que você não vai mudar agora, mas que
você deve estar ciente de:
SECRET_KEY. Esta é uma chave secreta que é usada como parte da estratégia de
segurança de sites do Django. Se você não estiver protegendo esse código em
desenvolvimento, precisará usar um código diferente (talvez lido em uma
variável ou arquivo de ambiente) ao colocá-lo em produção.
DEBUG. Isso permite que os logs de depuração sejam exibidos em erro, em vez
de respostas de código de status HTTP. Isso deve ser definido como Falseem
produção, pois as informações de depuração são úteis para os invasores, mas,
por enquanto, podemos mantê-las definidas para True.
Conectando o mapeador de URLsSeção
O site é criado com um arquivo de mapeamento de URL ( urls.py ) na pasta do
projeto. Embora você possa usar esse arquivo para gerenciar todos os
mapeamentos de URL, é mais comum adiar os mapeamentos para o aplicativo
associado.
Abra locallibrary / locallibrary / urls.py e observe o texto instrucional que
explica algumas das formas de usar o mapeador de URLs.
"""locallibrary URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/2.1/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path
urlpatterns = [
path('admin/', admin.site.urls),
]
urlpatterns += [
path('catalog/', include('catalog.urls')),
]
Agora vamos redirecionar o URL raiz do nosso site (isto é 127.0.0.1:8000) para o
URL 127.0.0.1:8000/catalog/; este é o único aplicativo que usaremos neste
projeto, então podemos também. Para fazer isso, usaremos uma função de
visualização especial ( RedirectView), que toma como primeiro argumento a
nova URL relativa para redirecionar para ( /catalog/) quando o padrão de URL
especificado na path()função é correspondido (a URL raiz, nesse caso).
Adicione as seguintes linhas, novamente à parte inferior do arquivo:
Deixe o primeiro parâmetro da função path vazio para implicar '/'. Se você
escrever o primeiro parâmetro como '/', o Django dará o seguinte aviso quando
você iniciar o servidor de desenvolvimento:
WARNINGS:
?: (urls.W002) Your URL pattern '/' has a route beginning with a '/'.
Remove this slash as it is unnecessary.
If this pattern is targeted in an include(), ensure the include() pattern has
a trailing '/'.
O Django não oferece arquivos estáticos como CSS, JavaScript e imagens por
padrão, mas pode ser útil para o servidor web de desenvolvimento fazer isso
enquanto você cria seu site. Como adição final a esse mapeador de URL, você
pode ativar a veiculação de arquivos estáticos durante o desenvolvimento,
anexando as linhas a seguir.
# Use static() to add url mapping to serve static files during development
(only)
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
urlpatterns = [
Importante : você precisará executar os comandos acima toda vez que seus
modelos forem alterados de forma a afetar a estrutura dos dados que precisam
ser armazenados (incluindo a adição e remoção de modelos inteiros e campos
individuais).
O makemigrations comando cria (mas não aplica) as migrações para todos os
aplicativos instalados em seu projeto (você também pode especificar o nome do
aplicativo para executar apenas uma migração para um único projeto). Isso lhe
dá a chance de verificar o código para essas migrações antes que elas sejam
aplicadas - quando você é um especialista em Django, você pode escolher
ajustá-las ligeiramente!
O migratecomando realmente aplica as migrações ao seu banco de dados (o
Django rastreia quais foram adicionadas ao banco de dados atual).
Nota : Veja Migrações (Django docs) para informações adicionais sobre os
comandos de migração menos usados.
Não se preocupe! Essa página de erro é esperada porque não temos páginas /
URLs definidas no catalogs.urlsmódulo (para o qual somos redirecionados
quando obtemos uma URL para a raiz do site).
Nota : A página acima demonstra um ótimo recurso do Django - registro
automatizado de depuração. Uma tela de erro será exibida com informações
úteis sempre que uma página não puder ser encontrada ou qualquer erro for
levantado pelo código. Nesse caso, podemos ver que o URL que fornecemos não
corresponde a nenhum dos nossos padrões de URL (conforme listado). O
registro será desativado durante a produção (quando colocarmos o site ao vivo
na Web), caso em que uma página menos informativa, mas mais fácil de usar,
será exibida.
Neste ponto, sabemos que o Django está funcionando!
Desafie-seSeção
O catálogo / diretório contém arquivos para as visualizações, modelos e outras
partes do aplicativo. Abra esses arquivos e inspecione o clichê.
Como você viu acima, um mapeamento de URL para o site Admin já foi
adicionado no urls.pydo projeto . Navegue até a área administrativa em seu
navegador e veja o que acontece (você pode inferir o URL correto do
mapeamento acima).
ResumoSeção
Agora você criou um projeto de site esqueleto completo, que pode ser
preenchido com URLs, modelos, visualizações e modelos.
Este artigo mostra como definir modelos para o site da LocalLibrary . Explica o
que é um modelo, como ele é declarado e alguns dos principais tipos de
campo. Ele também mostra brevemente algumas das principais maneiras de
acessar os dados do modelo.
Pré-requisitos: Tutorial do Django Parte 2: Criando um site esqueleto .
Objetivo: Ser capaz de projetar e criar seus próprios modelos, escolhendo campos apropriadamente.
visão globalSeção
Os aplicativos da Web do Django acessam e gerenciam dados por meio de
objetos do Python chamados de modelos. Os modelos definem a estrutura dos
dados armazenados, incluindo os tipos de campo e possivelmente também seu
tamanho máximo, valores padrão, opções de lista de seleção, texto de ajuda
para documentação, texto de etiqueta para formulários etc. A definição do
modelo é independente do banco de dados subjacente você pode escolher um
dentre vários como parte das configurações do seu projeto. Uma vez que você
escolheu qual banco de dados você quer usar, você não precisa falar
diretamente com ele - você apenas escreve sua estrutura de modelo e outro
código, e o Django lida com todo o trabalho sujo de se comunicar com o banco
de dados para você.
Este tutorial mostra como definir e acessar os modelos para o exemplo
do site da LocalLibrary.
Criando os modelos da LocalLibrarySeção
Antes de entrar e começar a codificar os modelos, vale a pena dedicar alguns
minutos para pensar sobre quais dados precisamos armazenar e as relações
entre os diferentes objetos.
Ao projetar seus modelos, faz sentido ter modelos separados para cada "objeto"
(grupo de informações relacionadas). Nesse caso, os objetos óbvios são livros,
instâncias de livros e autores.
Você também pode querer usar modelos para representar opções de lista de
seleção (por exemplo, como uma lista suspensa de opções), em vez de
codificar as opções no próprio site - isso é recomendado quando todas as
opções não são conhecidas antecipadamente ou podem mudança. Os
candidatos óbvios a modelos neste caso incluem o gênero de livro (por
exemplo, ficção científica, poesia francesa, etc.) e idioma (inglês, francês,
japonês).
Uma vez que decidimos sobre nossos modelos e campo, precisamos pensar
sobre os relacionamentos. O Django permite que você defina relacionamentos
que são um para um ( OneToOneField), um para muitos ( ForeignKey) e muitos
para muitos ( ManyToManyField).
Com isso em mente, o diagrama de associação da UML abaixo mostra os
modelos que definiremos nesse caso (como caixas). Como acima, criamos
modelos para livro (os detalhes genéricos do livro), instância de livro (status de
cópias físicas específicas do livro disponível no sistema) e autor. Também
decidimos ter um modelo para o gênero, para que os valores possam ser
criados / selecionados através da interface administrativa. Decidimos não ter um
modelo para o BookInstance:status - codificamos os valores ( LOAN_STATUS)
porque não esperamos que isso mude. Dentro de cada uma das caixas você
pode ver o nome do modelo, os nomes e tipos de campos, e também os
métodos e seus tipos de retorno.
O diagrama também mostra as relações entre os modelos, incluindo
suas multiplicidades . As multiplicidades são os números no diagrama que
mostram os números (máximo e mínimo) de cada modelo que podem estar
presentes no relacionamento. Por exemplo, a linha de conexão entre as caixas
mostra que Livro e um Gênero estão relacionados. Os números próximos ao
modelo Gênero mostram que um livro deve ter um ou mais gêneros (quantos
você quiser), enquanto os números do outro lado da linha ao lado do modelo
Livro mostram que um Gênero pode ter zero ou muitos associados livros.
Nota : A próxima seção fornece uma cartilha básica explicando como os modelos
são definidos e usados. Ao lê-lo, considere como vamos construir cada um dos
modelos no diagrama acima.
Primer modeloSeção
Esta seção fornece uma breve visão geral de como um modelo é definido e
alguns dos campos e argumentos de campo mais importantes.
class MyModelName(models.Model):
"""A typical class defining a model, derived from the Model class."""
# Fields
my_field_name = models.CharField(max_length=20, help_text='Enter field
documentation')
...
# Metadata
class Meta:
ordering = ['-my_field_name']
# Methods
def get_absolute_url(self):
"""Returns the url to access a particular instance of MyModelName."""
return reverse('model-detail-view', args=[str(self.id)])
def __str__(self):
"""String for representing the MyModelName object (in Admin site
etc.)."""
return self.my_field_name
Campos
help_text : Fornece um rótulo de texto para formulários HTML (por exemplo, no site
admin), conforme descrito acima.
verbose_name : um nome legível para o campo usado nos rótulos de campo. Se não
for especificado, o Django irá inferir o nome detalhado do nome do campo.
padrão : o valor padrão do campo. Isso pode ser um valor ou um objeto que pode ser
chamado, caso em que o objeto será chamado toda vez que um novo registro for
criado.
null : Se True, o Django irá armazenar valores NULLem branco como no banco de dados
para campos onde isto é apropriado (a CharFieldirá armazenar uma string vazia). O
padrão é False.
blank : Se True, o campo tiver permissão para ficar em branco nos seus formulários. O
padrão é False, o que significa que a validação de formulário do Django forçará você a
inserir um valor. Isso é frequentemente usado com null=True, porque se você for
permitir valores em branco, também deseja que o banco de dados possa representá-los
adequadamente.
escolhas : um grupo de escolhas para este campo. Se isso for fornecido, o widget de
formulário correspondente padrão será uma caixa de seleção com essas opções, em
vez do campo de texto padrão.
primary_key : If True, define o campo atual como a chave primária do modelo (uma
chave primária é uma coluna especial do banco de dados designada para identificar
exclusivamente todos os registros de tabela diferentes). Se nenhum campo for
especificado como a chave primária, o Django adicionará automaticamente um campo
para essa finalidade.
Existem muitas outras opções - você pode ver a lista completa de opções de
campo aqui .
Tipos de campo comuns
A lista a seguir descreve alguns dos tipos de campos mais usados.
Metadados
Outros atributos úteis permitem que você crie e aplique novas "permissões de
acesso" para o modelo (as permissões padrão são aplicadas automaticamente),
permita a ordenação com base em outro campo ou declare que a classe é
"abstrata" (uma classe base que você não pode criar registros para, e em vez
disso, serão derivados para criar outros modelos).
Muitas das outras opções de metadados controlam qual banco de dados deve
ser usado para o modelo e como os dados são armazenados (eles são
realmente úteis somente se você precisar mapear um modelo para um banco de
dados existente).
Métodos
Nota : Você pode usar sublinhados (__) para navegar quantos níveis de
relacionamentos ( ForeignKey/ ManyToManyField) desejar. Por exemplo, um Bookque
tenha tipos diferentes, definidos usando um relacionamento "cover" adicional,
pode ter um nome de parâmetro:type__cover__name__exact='hard'.
Há muito mais que você pode fazer com as consultas, incluindo pesquisas para
trás de modelos relacionados, encadeando filtros, retornando um conjunto
menor de valores, etc. Para obter mais informações, consulte Fazendo
consultas (Django Docs).
Definindo os modelos LocalLibrarySeção
Nesta seção, começaremos a definir os modelos para a
biblioteca. Abra models.py (em / locallibrary / catalog /) . O clichê na parte
superior da página importa o módulo de modelos , que contém a classe base do
modelo da models.Modelqual nossos modelos herdarão.
from django.db import models
# Create your models here.
def __str__(self):
"""String for representing the Model object."""
return self.name
class Book(models.Model):
"""Model representing a book (but not a specific copy of a book)."""
title = models.CharField(max_length=200)
# Foreign Key used because book can only have one author, but authors can
have multiple books
# Author as a string rather than object because it hasn't been declared
yet in the file
author = models.ForeignKey('Author', on_delete=models.SET_NULL, null=True)
# ManyToManyField used because genre can contain many books. Books can
cover many genres.
# Genre class has already been defined so we can specify the object above.
genre = models.ManyToManyField(Genre, help_text='Select a genre for this
book')
def __str__(self):
"""String for representing the Model object."""
return self.title
def get_absolute_url(self):
"""Returns the url to access a detail record for this book."""
return reverse('book-detail', args=[str(self.id)])
ForeignKeypara identificar o associado Book(cada livro pode ter muitas cópias, mas
uma cópia só pode ter uma Book).
CharField para representar a impressão (lançamento específico) do livro.
class BookInstance(models.Model):
"""Model representing a specific copy of a book (i.e. that can be borrowed
from the library)."""
id = models.UUIDField(primary_key=True, default=uuid.uuid4,
help_text='Unique ID for this particular book across whole library')
book = models.ForeignKey('Book', on_delete=models.SET_NULL, null=True)
imprint = models.CharField(max_length=200)
due_back = models.DateField(null=True, blank=True)
LOAN_STATUS = (
('m', 'Maintenance'),
('o', 'On loan'),
('a', 'Available'),
('r', 'Reserved'),
)
status = models.CharField(
max_length=1,
choices=LOAN_STATUS,
blank=True,
default='m',
help_text='Book availability',
)
class Meta:
ordering = ['due_back']
def __str__(self):
"""String for representing the Model object."""
return f'{self.id} ({self.book.title})'
class Meta:
ordering = ['last_name', 'first_name']
def get_absolute_url(self):
"""Returns the url to access a particular author instance."""
return reverse('author-detail', args=[str(self.id)])
def __str__(self):
"""String for representing the Model object."""
return f'{self.last_name}, {self.first_name}'