Projeto Realizadado seguindo os procedimentos da aula Python 3 na Web_com_Django. o Principal objetico deste projeto é esclarecer diferenças de versões apresentada para registrar futuras complicações
- Django 2 carece de uma forma de deletar os dados do banco de dados ou um app completamente de forma segura ou simples, a vários métodos na internet sobre isso, mas nem um deles é uma extensão de comandos ou plugins para django que realize o procedimento de forma automatizada. Depois realizar uma pesquisa melhor sobre, talvez encontre uma forma.
Criei este projeto a partir desta aula.
- Instalado Python 3.7.0b4
- Instalado Virtualenv
- Configurado Ambiente de desenvolvimentos com VirtualEnv, Simplemooc
- Instalado Django 2.0.5 No Ambiente Virtual e iniciado projeto SimpleMooc
- Feito configurações necessárias.
- Criado app core e feito modificações necessárias.
- Aplicado templates, arquivos files e css.
- Realizado herança com tags padrão do django.
- A versão do Django apresentada no Curso é diferente a usada neste Projeto
- Curso: versão 1.x
- Este Projeto: versão 2.0.5
- Devido a diferença de Versão as seguintes alterações são necessárias
- syncdb foi descontinuada usar os comandos migrate para tal
- A forma de adicionar url ao url_patterns foi alterada:
- A forma apresentada abaixo foi a indicada no curso:
from django.conf.urls import patterns, include, url urlpatterns = patterns('', url(r'^$', 'SimpleMooc.core.views.home', name='home'), url(r'^contato/$', 'SimpleMooc.core.views.contact', name='contact') )
- Deve-se usar a seguinte forma para a versão deste Projeto:
from django.urls import path from simplemooc.core.views import home, contact app_name = 'core' urlpatterns = [ path('', home, name="home"), path('contact/', contact, name="contact"), ]
- Incluir urls de outros arquivos:
from django.contrib import admin from django.urls import path, include urlpatterns = [ path('', include('simplemooc.core.urls', namespace='core')), path('admin/', admin.site.urls) ]
- A forma apresentada abaixo foi a indicada no curso:
Esta aula tem o objetivo criar models para manipular o banco de dados sem a utilização de comandos de banco de dados
- Criar novo app "courses", com o objetivo de gerenciar os cursos do simplemooc
- Criar Models do app courses.
- Atualizar o banco de dados, com os modelos criados, uso de migrate.
-
A Objetos do tipo image (models.ImageField) precisam da biblioteca Pillow que não esta instalada por padrão, para instalar é preciso usar o comandos:
$ pip install Pillow
Demonstração dos metodos usados dentro da classe models. nem um procedimento de alteração nesta aula. Apenas demonstração dos métodos do django.
- Não apagar o banco de dados como dito em aula, A nova versão de Django faz comparação de informações com o banco e muda, sem precisar remover diretamente
- Método save() em models, é extremamente importante pois é ele que lança a informação do modelo no banco de dados do Django.
- Delete() remove os dados.
- Os objetos models são relacionados as suas respectivas linhas de banco de dados no django
- Por enquanto não foi ensinado como modificar models via uso de id.
-
Procedimento alternativo ao sqlall
$ py manage.py showmigrations
- Este comando irá mostrar a lista de migrations executadas agrupadas por app
- Procure seu app e lá terá todos os nomes das modificações feitas pelas migrações, então execute:
$ py manage.py sqlmigrate app_name migrate_name
- O resultado será o comando sql para realizar a migração do código.
-
O acesso e manipulação do dos objetos do django dar-se na utilização do objeto do model_name.objects.método(), consultar tudo (all()), filtrar (filter(lookups)).
- Mais uma vez não apagar banco de dados como mostrado na aula.
- Por causa da Atualização do Django, para realizar o equivalente a sqlall da versão antiga usa-se este procedimento.
- [Importante] Acessando Model.objects.all() ele retorna um modo de acesso a todos os objetos criados porém ele não faz a consulta no BD ainda, para isso usa-se os métodos nele.
- [Importante] O Método Model.objects.filter() retorna o mesmo modo de acesso, porém filtrado via lookups.
- model_name.objects é um object tipo manager.
Aula sobre Custom Manager
- Nem um procedimento que requer atenção. Igual a aula.
- É possível fazer um controle lógico avançado na consulta ao banco com models.Q.
- Detalhe, a consulta é sensível a caixa.
Aula Sobre admin e como fazer um admin administrar models criados.
- Nem um procedimento que requer atenção. Igual a aula.
- Utilizar o admin.site.register dentro de admin.py, para que o user admin possa alterar via interface.
continuação da aula sobre adimin.
- Use a Função __str__ para mudar a informação de nome apresentada na interface de usuário.
- Classe META dentro do model criado é usado para mudar os dados META do modelo.
- Um ModelAdmin pode ser usado para mudar a interface da model associada a mesma.
Aula sobre edição de models adicionados ao admin via interface.
- Nem um procedimento que requer atenção. Igual a aula.
- prepopulated_fields é uma variável interessante para dar valores iniciais as variáveis de model, ao que parece usa um array associativo.
A partir desta aula e do commit "aula 18" o repositório do git foi mudado para incluir apenas o projeto DJANGO.
Ou seja a subpasta simplemooc agora é a pasta padrão.
- aula 19
- aula 20
- aula 21
- aula 22
- aula 23
- aula 24
- aula 25
- aula 26
- aula 27
- aula 28
- aula 29
- aula 30
- aula 31
Criando a interface de views dos Cursos
- Quando solicitar para edição de url, usar esta [referencia](#notas 11) como procedimento
Criando uma listagem dos cursos na Página Cursos
- Nem um procedimento que requer atenção. Igual a aula.
- Referencia para tags e filtros
Requisição de imagens do banco de dados para a interface html.
- Nem um procedimento que requer atenção. Igual a aula.
- A imagem carregada pelos modulos são copiados em uma pasta "/media/"
- É preciso configurar o arquivo settings para poder "servir" os dados dentro de media
- Estranhamente, a pasta media fica no projeto principal do Django, não na pasta do app
Criando a página de um único curso
- NÃO apagar a Tabela, Usar o migrate para auterar o banco.
- Expressão regular em URL foi mudada para URLDispacher, logo o procedimento foi alterado. O modelo é apresentado em notas, quanto ao que acontece depois a aula segue igual.
- A diferença no uso de expressão regular é mostrado a seguir
- Apresentado em aula:
# File /courses/urls.py from django.conf.urls import patterns, include, url urlpatterns = patterns('simplemooc.courses.views', url(r'^$', 'index', name='index'), url(r'^(?P<pk>\d+)/$', 'details', name='details') )
- Código em Django 2:
# File /courses/urls.py from django.urls import path from simplemooc.courses.views import index, details app_name = 'courses' # namespace urlpatterns = [ path('', index, name="index"), path('<int:pk>', details, name='details')# acredito que tenha sido melhor usar slug ao invés da id do curso. ]
- Apresentado em aula:
- Acredito que exista uma forma mais adequada de tratar expressões regulares em django 2, porém seguirei a aula.
Editando a página de curso
- Nem um procedimento que requer atenção. Igual a aula.
Alterando a expressão regular para aceitar slugs como url e definindo get_absolute_url.
- como apresentado em notas 22 procedimento de expressão regular na url é diferente ver nas notas a baixo.
- Como dito na aula anterior, URLDispacher foi atualizado, permitindo um expressão regular melhor neste caso, a expressão regular com slug muda para apenas slug
-
Apresentado em aula:
url(r'^(?P<slug>[\w_-])/$', 'details', name='details')
-
Código em Django 2:
path('<slug:slug>', details, name='details')
-
Apenas uma introdução a forms do django
- Nem um procedimento.
- Django tem sua própria formulação de formulários, o que quer dizer que são criados via classes similar ao models, porém direcionado a exibição e captura de dados no site.
Criando um model e manipulando via shell
- Nem um procedimento que requer atenção. Igual a aula.
- forms possui opções de Renderização
Uso de forms no template do django
- Nem um procedimento que requer atenção. Igual a aula.
- a tag csrf_token é um modelo de defesa contra csrt
Submissão de formulários do Django
- Nem um procedimento que requer atenção. Igual a aula.
- Sempre que houver uma requisição na url dos detalhes do curso, django vai invocar o método details() em Course/views.py como definido em course/urls.py e lá pode ser tratado o tipo de request verificando request.method.
- Quando o método is_valid() é executado, o acesso aos campos de form acontecem apenas via método cleaned_data que é um array associativo.
Introdução para envio de E-mail, usando a submissão de formulários.
- Nem um procedimento que requer atenção. Igual a aula.
- É preciso adicionar os dados em settings.py.
-
uma configuração a se prestar atenção é:
# padrão de Django, define que irá usar um servidor smtp para lançar o email # TODO procurar como configurar o servidor padrão smtp EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' # para exibir no console, exemplo utilizado neste projeto EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
-
Configurando exibição envio de e-mail.
- Nem um procedimento que requer atenção. Igual a aula.
- Não escreva funções muito grandes na views.py, o ideal é que ela seja a mais limpa possível
send_mail
é uma função padrão de django, ver comentários para mais informações em forms para mais informações- As informações de envio de email podem ser encontradas aqui
Criando uma organização de envio de e-mails com Templates
- O instrutor da aula criou o arquivo /core/mail.py e o editou completamente, antes da aula.
- Deve-se baixar e extrair o mail.py do arquivo no site para sua pasta core.
- Este método, lança um modelo html como email, podendo gerar e-mails interativos.
Introdução a sistemas de usuário.
- Nem um procedimento.
- A biblioteca que Django usa para sistemas de usuário é contrib.auth
Como criar um url para logins do django.
- E de novo, não usar uma string em urlpatterns.
- É preciso importar login do Django para aplicar em path.
- forma de importar
from django.contrib.auth.views import login
Criando o template de cadastro.
- Nem um procedimento que requer atenção. Igual a aula.
Aplicando Formulários no template de cadastro.
- Nem um procedimento que requer atenção. Igual a aula.
Configurando o RegisterForm para conter e aceitar email no cadastro
- Nem um procedimento que requer atenção. Igual a aula.
Configurando RegisterForm para aceitar apenas e-mail único.
- Nem um procedimento que requer atenção. Igual a aula.
Criando e adicionando o logout no template.
- Nem um procedimento que requer atenção. Igual a aula.