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