django: desenvolvendo uma aplicação web em minutos

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

Upload: rodrigo-nossal

Post on 21-Dec-2014

5.123 views

Category:

Technology


5 download

DESCRIPTION

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

TRANSCRIPT

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?