python e django
DESCRIPTION
Palestra ministrada por Filipe Varjão no VII Encontro do PUG-PE realizado em 18/09TRANSCRIPT
Filipe Rafael Gomes Varjão
Django é um framework escrito em Python
História do Django
ERA UMA VEZ...
Uma equipe de jornalista da Lawrence Journal Word http://www2.ljworld.com/
Ambiente de constantes modificações e prazos estreitos
Consequência nasce o Django com objetivo de atender os curtos prazos (é um framework para desenvolvimento rápido para web)
O nome Django em homenagem ao guitarrista de jazz Django Reinhardt
História do Django
ERA UMA VEZ...
Em 2005 mais maduro e eficaz com capacidade de ser aplicado a vários tipos de site de alto tráfego, torna-se projeto público (Open-Source)
Sob licença da BSD (Berkeley Software Distribution)
Somente em Junho 2008, criou-se a Django Software Foundation http://www.djangoproject.com/foundation/
O Django adota a filosofia DRY(Don't Repeat Yourself) http://c2.com/cgi/wiki?DontRepeatYourself
Características Django
O framework web para perfeccionistas com prazos...
O Django utiliza o padrão MVC (model-view-controller)é um padrão de arquitetura de software que visa separar a
lógica de negócio da lógica de apresentação
Model - é usado para definir e gerenciar o domínio da informação.
View - é apresenta o modelo de forma adequada na saída de dados.
Controller – rebebe a entrada de dados e inicia a resposta (direcionada) ao invocar objetos do modelo.
Características Django
padrão MVC (model-view-controller)
Características DjangoO framework web para perfeccionistas com prazos...
O Djando usa o mapeamento Objeto-Relacional (ORM)
ORM é uma técnica de desenvolvimento utilizada para programação orientada a objetos, utilizando BD relacionais.
As tabelas do banco de dados são representadas através de classes e os registros de cada tabela são representados como instâncias das classes correspondentes.
Com isso o programador não se preocupa com os comandos da linguagem SQL (que também é possível)
Características Django
O framework web para perfeccionistas com prazos...
O Django fornece a API (Application Programming Interface) shell e Administrativa
Formulários
URL's Elegantes (expressão regular)
Sistema de Templates extensível e amigável (design, conteúdo e código”Python”)
Internacionalização (aplicações multi-idioma, tradução)
Django
mãos a obra !!!!!
Django
mãos a obra!! ..
Certificado que o Django está instalado direcione o caminho da sua aplicação /workspace/pugpe … Obs: nunca por sua aplicação no diretório root.
django-admin.py startproject sitePugpe
SitePugpe/__init__.pymanage.pysettings.pyurls.py
Django
Rodando o servidor
python manage.py runserver
python manage.py runserver 8080
python manage.py runserver 0.0.0.0:8000
Acesse:. http://127.0.0.1:8000/
Django
settings – é um modulo Python com várias representações do Django (configuração).
python manage.py syncdb
DATABASES = {'ENGINE': _ _ _ _ 'NAME': _ _ _ _ _
Django
Startando a aplicação
python manage.py startapp Pugweb
Pugweb/__init__.pymodels.pyviews.py
Django
Criando nossos models (simples classes em Python, tabelas do bando de dados) dentro de Pugweb/models.py
class EncontroPugPe(models.Model): tema_palestra = models.CharField(max_length=200) palestrante = models.CharField(max_length=200) data = models.DateTimeField('data')
Django
Criando nossos models (simples classes em Python, tabelas do bando de dados) dentro deVIIencontroPugPe/models.py
O Django suporta todos os relacionamentos de banco de dados comuns: muitos-para-um, muitos-para-muitos e um-para-um
class Comentarios(models.Model): encontroPugPe = models.ForeignKey(EncontroPugPe) comentario = models.CharField(max_length=200) contagem = models.IntegerField()
Django
Criando models
Cria o esquema do bando de dados para a aplicação.
Cria uma API de acesso para os objetos criados e seus valores no banco.
Obs.: incluir nossa aplicação nas configurações
settings.py/ INSTALLED_APPS = (
…
'sitePugpe.Pugweb' )
python manage.py sql Pugweb
Django
BEGIN;CREATE TABLE "Pugweb_encontropugpe" ( "id" integer NOT NULL PRIMARY KEY, "tema_palestra" varchar(200) NOT NULL, "palestrante" varchar(200) NOT NULL, "data" datetime NOT NULL);CREATE TABLE "Pugweb_comentarios" ( "id" integer NOT NULL PRIMARY KEY, "encontroPugPe_id" integer NOT NULL REFERENCES "Pugweb_encontropugpe" ("id"), "comentario" varchar(200) NOT NULL, "contagem" integer NOT NULL);COMMIT;
Django
Agora atualizaremos as tabelas do banco de dados com o comando
Utilizando a API shell no terminal no diretório do desenvolvimento /workspace/sitePugpe$
python manage.py syncdb
python manage.py shell
python manage.py syncdb
Django
Liberando a API do site de administração do Django
Adicione o "django.contrib.admin" no settings.py no campo de INSTALLED_APPS (padrão remova o símbolo de comentário)
Rode novamente o comando syncdb para a aplicação gerar as tabelas relacionais no banco de dados
Como o Django fornece essa API administrativa via browser vem por padrão seu direcionamento nas urls.py sendo somente necessário retirar os símbolos de comentários
python manage.py syncdb
Django
Liberando a API do site de administração do Djangofrom django.conf.urls.defaults import *
# Uncomment the next two lines to enable the admin:from django.contrib import adminadmin.autodiscover()
urlpatterns = patterns('', # Example: # (r'^mysite/', include('mysite.foo.urls')),
# Uncomment the admin/doc line below and add 'django.contrib.admindocs' # to INSTALLED_APPS to enable admin documentation: # (r'^admin/doc/', include('django.contrib.admindocs.urls')),
# Uncomment the next line to enable the admin: (r'^admin/(.*)', admin.site.root),)
Django
Editando a API do site de administração do Django
Adicione os objetos na interface de administração
Crie um novo arquivo indicando os objetos relacionados a sua aplicação de o nome de admin.py e salve dentro do diretório da aplicação /Pugweb/admin.py
from Pugweb.models import *from django.contrib import admin
admin.site.register(EncontroPugPe)
Django
Editando a API do site de administração do Django
Crie um classe administrativa da sua classe já definida e faça com que a interface seja mostre aquilo que lhe e interessante
from Pugweb.models import *from django.contrib import admin
class EncontroPugPeAdmin(admin.ModelAdmin):fields = ['data', 'tema_palestra', 'palestrante']
admin.site.register(EncontroPugPe, EncontroPugPeAdmin)admin.site.register(Comentarios)
Django
Editando o template da API administrativa
No settings.py temos a opção de direcionarmos os templates da página, basta mostrar a direção do diretório em que estarão os templates
Pode-se copiar (django/contrib/admin/templates) os templates da API administrativa para os modificar
TEMPLATE_DIRS = ( '/home/filipe//home/filipe/workspace/sitePugpe/templates'
)
Django
Criando urls
Quando se faz a chamada da url no browser de uma página construída em Django, o sistema busca na variável ROOT_URLCONF nos settings.py
Que por padão já esta direcionada para a aplicação ROOT_URLCONF = 'sitePugpe.urls', sendo que essa chamada e comparada a lista de urls descritas em urls.py
Django
Criando urls
Expressões regulares são uma forma concisa e flexível de identificar cadeias de caracteres de interesse, como caracteres particulares, palavras ou padrões de caracteres
Como os padrões de URL são expressões regulares, realmente não há limites para o que você possa fazer com elas.
Django
Criando urls
from django.conf.urls.defaults import *
# Uncomment the next two lines to enable the admin:from django.contrib import adminadmin.autodiscover()
urlpatterns = patterns('sitePugpe.Pugweb.views', (r'^index/$', 'index'), (r'^listaPalestras/$', 'listaPalestras'), (r'^admin/', include(admin.site.urls)),)
Django
Contruindo as views dentro de sitePugpe/Pugweb/views.py as views consistem em funções def de Python
def index(request): return HttpResponse("Hello, world.")
def listaPalestras(request):c = RequestContext(request)x = EncontroPugPe.objects.all()lista = [ ]for i in x:
lista += [ i.tema_palestra ]c['lista'] = listareturn render_to_response('listaindex.html', c)
Django# Create your views here.from django.http import HttpResponsefrom django.shortcuts import render_to_responsefrom Pugweb.models import*from django.template import Context, loader, RequestContext
def index(request): return HttpResponse("Hello, world.")
def listaPalestras(request):c = RequestContext(request)x = EncontroPugPe.objects.all()lista = []for i in x:
lista += [ i.tema_palestra ]c['lista'] = listareturn render_to_response('listaindex.html', c)
Django
from django.conf.urls.defaults import *
# Uncomment the next two lines to enable the admin:from django.contrib import adminadmin.autodiscover()
urlpatterns = patterns('sitePugpe.Pugweb.views', (r'^index/$', 'index'), (r'^listaPalestras/$', 'listaPalestras'), (r'^admin/', include(admin.site.urls)),)
Django
Criando a página html
{% if lista %}{% for i in lista %}
{{ i }}{% endfor%}
{% endif %}
Referências
http://www.python.org/
http://www2.ljworld.com/
http://docs.djangoproject.com/en/dev/faq/general/#what=doe
http://www.djangoproject.com/foundation/
http://c2.com/cgi/wiki?DontRepeatYourself