django
O poder de um
super-framework
com a dinamicidade
do Python.
Sobre o Django
- High level web framework
- Organização baseada em Apps (Módulos)
- ORM (Object-Relational Mapper)
- Template Engine
- Forms (Classes para criar e gerenciar formulários)
- Url Amigáveis
- Interface Admin gratis
- Sistema de autenticação pronto
- Mais 10MB de Libs já incluídas
- Milhares de Apps Plugáveis na net
Quem Usa
- Multmeio
- Instagram
-
Pinterest
- Disqus
- Mozila
- BitBucket
- Globo.com
- ...
Iniciando um projeto
- Baixando o framework:
$ pip install django==1.4.1
- Iniciando um projeto:
$ python django-admin.py startproject helloworld
- O django cria uma pasta para o seu projeto:
$ cd helloworld && ls
- Rodando seu projeto:
$ python manage.py runserver
- Criando um módulo:
$ python manage.py startapp core $ cd core && ls
Entendo os arquivos
- Models: Nosso arquivo do ORM. Classes que representam as Tabelas do nosso banco, ou seja Classes no lugar de Tabelas.
- Tests: Onde nós devemos escrever os Testes da nossa respetiva App.
- Views: Funções que obrigatóriamente recebem a requisição HTTP como primeiro argumento e é ela quem para qual template mandar quais variáveis, basicamente faz a comunicação do Models com o Template.
- Templates: Arquivos utilizados para exibir as informações processadas pelas Views.
- Urls: Nossas rotas de acesso às views.
Como funciona
profissionaisti.com.br/2009/04/entendendo-o-django
Hello World
- Editando nosso views.py:
from django.http import HttpResponse def hello_world(request): return HttpResponse("Hello World!")
- Criando nosso urls.py:
from django.conf.urls import * urlpatterns = patterns('views', url(r'^/?$', 'hello_world'), )
- Incluindo as urls da app:
$ vi ../helloworld/urls.py
... url(r'^', include('core.urls')), ...
Fazendo uma TodoList
- Vamos criar outro projeto, chamado todolist
- Vamos criar uma app, também chamada core
$ django-admin.py startproject todolist $ cd todolist $ python manage.py startapp core
- Vamos Editar nosso Models.py e criar uma Classe, chamada TodoList. (docs.djangobrasil.org/topics/db/models.html)
class TodoList(models.Model): name = models.CharField(null=False, max_length=100)
Fazendo uma TodoList
Configurando nosso projeto:
- Configurar o Banco de Dados
- Adicionar nossa nova App no projeto
- Criar Tabelas no Banco
- Acessar a interface Admin
Fazendo uma TodoList
Configurando nosso projeto:
- Configurar de Banco de Dados
$ vi todolist/settings.py +12
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': 'todolist.db', } }
-
Adicionar nossa nova App no projeto
$ vi todolist/settings.py +121
INSTALLED_APPS = ( ... Outras Apps 'core', )
Fazendo uma TodoList
Configurando nosso projeto:
-
Criar Tabelas no Banco
$ python manage.py syncdb
-
Acessar a interface Admin
$ vi core/admin.py
from django.contrib import admin from core.models import * admin.site.register(TodoList)
- Configurar interface Admin
$ vi todolist/settings.py +199
# Uncomment the next line to enable the admin: 'django.contrib.admin',
Fazendo uma TodoList
Configurando nosso projeto:
-
Configurar interface Admin
$ vi todolist/urls.py
from django.contrib import admin admin.autodiscover() urlpatterns = patterns('', ... url(r'^admin/', include(admin.site.urls)), )
Criando uma Todo
Repita os passos:
- Vamos Editar nosso Models.py e criar uma Classe, chamada Todo.
- Utilize o campo "ForeignKey" do módulo models para fazer o relacionamento entre uma TodoList e várias Todos.
$ vi core/models.py
class Todo(models.Model): name = models.CharField(null=False, max_length=100) todolist = models.ForeignKey(TodoList)
Criando uma Todo
Repita os passos:
- Como Alteramos as classes do nosso Models, precisamos atualizar o Banco, então vamos simplesmente apagar o banco antigo e criar um novo:
$ rm todolist.db
$ python manage.py syncdb
- precisamos registrar o nosso novo Model, na admin:
-
Vamos acessar a interface Admin e ver o resultado.
$ vi core/admin.py +5
admin.site.register(Todo)
Incrementando
Seguindo o Template
- Criar Urls e Views
- Converter os arquivos cedidos para o formato de Template do Django
- Exibir valores do Banco nos templates
-
Adicionar uma TodoList
- Deletar uma TodoList
Incrementando
Seguindo o Template
Criar Urls e Views, seguindo o
outro projeto de helloworld, crie Urls para:
- Listagem de Todolist
-
Adição de Todolist
- Remoção de Todolist
------------------------ *** ------------------------
- Listagem de Todos, pertencentes a uma TodoList
- Adição de Todos, pertencentes a uma TodoList
- Remoção de Todos, pertencentes a uma TodoList
Incrementando
Seguindo o Template
- Converter os arquivos cedidos para o formato de Template do Django:
core |-- urls.py |-- views.py |-- models.py |-- templates | |-- todolists.html | `-- todos.html -- static | |-- css | | |-- custom.css | | |-- messages.css | | `-- style.css | `-- js | |-- custom.js | `-- jquery.min.js
Incrementando
Criando URL para Listar Todolists
$ vi core/urls.py
from django.conf.urls import patterns, url urlpatterns = patterns('core.views', # todolists url(r'^/?$', view='todolists'), )
Incrementando
Passando informações para o Templtate
$ vi core/views.py
from django.shortcuts import render_to_response, redirect from django.template import RequestContext from core.models import * def todolists(requests): data = { 'todolists': TodoList.objects.all() } return render_to_response('todolists.html', data, context_instance=RequestContext(request))
Incrementando
Passando informações para o Templtate
$ vi core/templates/todolists.html +19
<ul class="todo-list"> {% for todolist in todolists %} <li> <a href="todos.html"> {{ todolist.name }} </a> <a href="todolist/{{ todolist.pk }}/delete/" class="icon-delete right">Delete</a> </li> {% endfor %}
<ul>
Incrementando
Adicionando uma TodoList
Criando a View e a Url
$ vi core/views.py
def todolist_add(request): if request.method == "POST": todolist = TodoList() todolist.name = request.POST['name'] TodoList.save() return redirect('todolists')
$ vi core.urls.py
... url(r'^todolist/add/?$', view='todolist_add'),
Incrementando
Excluindo uma TodoList
Criando a View e a Url, ambas recebendo o ID da TodoList
$ vi core/views.py
def todolist_delete(request, todolist_id): todolist = TodoList.objects.get(pk=todolist_id) todolist.delete() return redirect('todolists')
$ vi core.urls.py
... url(r'^todolist/(?P<todolist_id>\d+)/delete/?$', view='todolist.delete'),
django_slides
By Luan Fonseca de Farias
django_slides
- 1,603