32
Desenvolvendo uma aplicação web em minutos Rodrigo Nossal

Django: Desenvolvendo uma aplicação web em minutos

Embed Size (px)

DESCRIPTION

Tutorial de uma aplicação Twitter like usando Djando (1.2)

Citation preview

Desenvolvendo uma aplicação web em minutos

Rodrigo Nossal

Um pouco sobre Django:

http://www.djangoproject.com

The web framework for perfectionists with deadlines

Python

Mapeado objeto­relacional (No SQL!!)

MVT (MVC), DRY

URLs Elegantes

Interface de administração automática

Internacionalização

Sistema de Cache

Quem usa o Django?

Google App Engine

Outros frameworks:Outros frameworks:

Python:TurboGears (http://www.turbogears.com)Pylons (http://pylonshq.com)

PHP:Cake (http://cakephp.org)Symphony (http://www.symfony­project.org)

Ruby:Rails (http://rubyonrails.org)Merb (http://merbivore.com)

A aplicaçãoA aplicação

A aplicaçãoA aplicação - Escopo: - Escopo:

 Registro (simples)

 Login

 Fazer posts

 Responder aos posts

 Adicionar (seguir) amigos

Uma aplicação de microblog (Twitter like)

Botando a mão na massaBotando a mão na massa

Botando a mão na massaBotando a mão na massa - Ambiente: - Ambiente:

Criando um projeto: 

$ django-admin startproject microblog

Criando uma aplicação:

$ cd microblog$ ./manage.py startapp app

Botando a mão na massaBotando a mão na massa - Ambiente: - Ambiente:

Microblog Blog __init__.py models.py views.py __init__.py manage.py settings.py urls.py

Botando a mão na massaBotando a mão na massa - Ambiente: - Ambiente:

 Base de dados: settings.pyDATABASE_ENGINE = 'mysql'DATABASE_NAME = 'microblog'DATABASE_USER = 'django'DATABASE_PASSWORD = '123456'

 Templates:TEMPLATES_DIRS = (

os.path.join(os.path.dirname(__file__), '/app/templates')

 Habilitar a aplicação:INSTALLED_APPS = (

…'microblog.app',

ModelsModels

SQL pra que mesmo?SQL pra que mesmo?

Models – Criando nossos modelosModels – Criando nossos modelos::

microblog/app/models.py

Habilitando o profile: settings.pyAUTH_PROFILE_MODULE = 'app.UserProfile'

Models – Brincando com a APIModels – Brincando com a API::

  Sincronizando banco de dados:

$ ./manage.py syncdb

  Usando o shell:

$ ./manage.py shell

>> from django.contrib.auth.models import User

>> from microblog.app.models import *

>> u = User(username = 'pedro',

first_name = 'Pedro',

last_name = 'da Silva')

>> u.save()

Models – Brincando com a APIModels – Brincando com a API::

  Usando o shell (continuação):

>> u

>> up = UserProfile(user=u)

>> up.save()

>> User.objects.all()

>> User.objects.get(username = 'pedro')

>> p = User.objects.get(username = 'pedro').get_ profile()

>> p.friends.add(User.objects.get(username = 'paulo'))

>> p.friends.all()

Models – Interface de administraçãoModels – Interface de administração::

 Habilitando a aplicação de administraçãoINSTALLED_APPS = (…'django.contrib.admin',

app/admin.py

UrlsUrls

  Urls elegantes, nada de urls como essa:http://www.clicrbs.com.br/blog/jsp/default.jsp?uf=1&

pg=1&coldir=1&section=Blogs&topo=3994.dwt&uf=1&local=1&template=3948.dwt&source=DYNAMIC,blog.BlogDataServer,getBlog&blog=222&tipo=1&post=199292

  Nosso esquema de urls:/<usuario>/<ação>/ Ex.: /rodrigo/friends/

  Nossas ações:friendsfollowersaddremovestatus /<número>/

URLs:URLs:

  Expressões regulares

  Habilitar a url para a interface de administraçãoadmin.autodiscover()(r'^admin/(.*)', admin.site.root)

URLs:URLs:

Vamos testar!Vamos testar!

$ ./manage.py runserver

 index:urlpatterns += patterns('microblog.app.wiews',

(r'^$', 'index'),)

URLs - Patterns:URLs - Patterns:

ViewsViews

  Generic wiews:

  Autenticação:(r'^login$', 'django.contrib.auth.views.login',

{'template_name': 'login.html'}),(r'^logout$', 'django.contrib.auth.views.logout',

{'next_page': '/'})

  view index:from django.http import HttpResponse

def index(request):return HttpResponse(“Hello world!!”)

Wiews:Wiews:

TemplatesTemplates

  Conteúdo separado do design

  Herança (block, extends)

  Blocos (block)

  Snippets (include)

  Filtros

  Tags (for, if, ifequal, ifnotequal)

Templates:Templates:

{{ varivavel }}

{% tags %}

{{ variavel|filtro }}

Templates - herança:Templates - herança:

base.html

Templates:Templates:

  base.html

  login.html

  register.html

  profile.html

  index.html

  friends.html

 followers.html

  posts_list_snippet.html

Views & TemplatesViews & Templates

Views & Templates:Views & Templates:

 index

 user_friends

 user_followers

 user

 register

 add

 remove

 status

Views & Templates:Views & Templates:

  Implementando as views

  Viewsshortcuts: get_object_or_404, render_to_response

  Contexts settings.pyTEMPLATE_CONTEXT_PROCESSORS = (

…'django.core.context_processors.auth',

Forms, ModelFormsForms, ModelForms

Forms, ModelForms:Forms, ModelForms:

  UserCreationForm:form = UserCreationForm(request.POST)

  Validação:if form.is_valid():

  ModelForm:class PostForm(Model.Form)

http://docs.djangoproject.comhttp://groups.google.com.br/group/django­brasilhttp://www.aprendendodjango.comhttp://www.djangobrasil.org

Onde aprender mais?Onde aprender mais?