workshop django

48
Workshop Pedro Gaspar [email protected] Sérgio Santos [email protected]

Upload: sergio-santos

Post on 11-Nov-2014

2.459 views

Category:

Technology


1 download

DESCRIPTION

Workshop de Iniciação a Django, uma plataforma web para desenvolvimento de sites utilizando a linguagem de programação Python. Projecto desenvolvido no workshop: http://jeknowledge.com/media/formacao/django/demo.zip

TRANSCRIPT

Page 1: Workshop Django

Workshop

Pedro Gaspar [email protected]

Sérgio Santos [email protected]

Page 2: Workshop Django

www.djangoproject.com

www.python.org

Page 3: Workshop Django

Introdução

Page 4: Workshop Django

Arquitectura

Clientes <> HTTP <> Servidor

Page 5: Workshop Django

Arquitectura

Browsers

Servidor Web+

Python+

Django

Page 6: Workshop Django

Arquitectura

Views

TemplatesModels

Lógica

Objectos Apresentação

Page 7: Workshop Django

Arquitectura

Views

TemplatesModels

Lógica

Objectos Apresentação

Base de dados

Page 8: Workshop Django

Base de dados

MySQL SQLite

Oracle PostgreSQL

Page 9: Workshop Django

Base de dados

MySQL SQLite

Oracle PostgreSQL

Page 10: Workshop Django

Projecto

Page 11: Workshop Django

“A minha biblioteca”

Page 12: Workshop Django

A minha biblioteca

Funcionalidades:

• Gestão de livros pessoais

• Catalogação de livros

• Partilha de listas de livros

Page 13: Workshop Django

Configuraçõesiniciais

Page 14: Workshop Django

Criar aplicação

manage.py startapp biblioteca

# E adicionar demo.biblioteca às INSTALLED_APPS

# no ficheiro settings.py

Criar projecto

django-admin.py startproject demo

Page 15: Workshop Django

Ficheiro de configuração

settings.py:

ROOT_PATH = os.path.realpath(os.path.dirname(__file__))

TIME_ZONE = 'Europe/Lisbon '

LANGUAGE_CODE = 'pt-pt'

MEDIA_ROOT = os.path.join(ROOT_PATH, 'media/')

MEDIA_URL = '/media/'

TEMPLATE_DIRS = ( os.path.join(ROOT_PATH, 'templates'), )

Page 16: Workshop Django

Base de dadospara SQLite

settings.py:

DATABASE_ENGINE = 'sqlite3'

DATABASE_NAME = 'demo.sqlite3'

DATABASE_USER = ''

DATABASE_PASSWORD = ''

DATABASE_HOST = ''

DATABASE_PORT = ''

Page 17: Workshop Django

Iniciar o servidor

manage.py runserver [8000]

>> http://localhost:8000

Page 18: Workshop Django

Iniciar a shell

manage.py shell

Python 2.5.2 (r252:60911, Feb 21 2008, 13:11:45) [MSC v.1310 32 bit (Intel)]

on win32

Type "help", "copyright", "credits" or "license" for more information.

(InteractiveConsole)

>>>

Page 19: Workshop Django

Desenvolvimento

Page 20: Workshop Django

Models

Page 21: Workshop Django

Objectos

Utilizadores

Livros

Categorias1

N

N

N

Page 22: Workshop Django

Utilizadores(automático)

• Username

• Last Name

• E-mail address

• Password

• Last Login

• Date Joined

Page 23: Workshop Django

Livros

• Título

• Autor

• ISBN

• Categorias

• Descrição

• Link

• Dono

• …

Page 24: Workshop Django

Categorias

• Nome

• Descrição

• …

Page 25: Workshop Django

Tipos de campos de objectos

from django.db import models

class NomeDoObjecto(models.Model):

nome = models.CharField(max_length=200)

data = models.DateTimeField('Data de criação')

custo = models.DecimalField(max_digits=9,

decimal_places=2)

Page 26: Workshop Django

Tipos de campos de objectos

...

email = models.EmailField()

comprovativo = models.FileField(upload_to='uploads')

foto = models.ImageField(upload_to='imagens')

anos = models.IntegerField('Anos de experiência')

descricao = models.TextField('Descrição')

link = models.URLField(verify_exists=True)

Page 27: Workshop Django

Tipos de campos de objectos

...

criador = models.ForeignKey(User,

verbose_name='Indivíduo')

amigos = models.ManyToManyField(User)

Page 28: Workshop Django

Definir modelos e campospara a biblioteca...

Page 29: Workshop Django

Sincronizar com abase de dados

manage.py syncdb

Page 30: Workshop Django

Administração

Page 31: Workshop Django

Adicionar modelos

admin.py:

from django.contrib import admin

from biblioteca.models import *

admin.site.register(Categoria)

admin.site.register(Livro)

Page 32: Workshop Django

Resultado

Page 33: Workshop Django

Configurar administraçãoadmin.py:

class LivroAdmin(admin.ModelAdmin):

# Campos apresentados na listagem

list_display = ('titulo', 'autor', 'dono', 'isbn',)

# Campos pesquisáveis

search_fields = ('titulo', 'autor', 'descricao')

# Ordenar por estes campos

ordering = ('titulo',)

admin.site.register(Livro, LivroAdmin)

Page 34: Workshop Django

Configurar administração

Outras opções:

• Remover campos

• Alterar a ordem dos campos

• Retirar obrigatoriedade de preenchimento

• Definir detalhes do layout da página

• ...

Page 35: Workshop Django

Views

Page 36: Workshop Django

URLsurls.py:

urlpatterns = patterns('',

(r'^users/(?P<username>\w+)/$', 'biblioteca.views.user_view'),

)

Page 37: Workshop Django

URLsurls.py:

urlpatterns = patterns('',

(r'^users/(?P<username>\w+)/$', 'biblioteca.views.user_view'),

)

>> http://localhost:8000/users/xpto

Link View

Variável Tipo de dados

Page 38: Workshop Django

URLsTipos de dados:

\w – Caracter alphanumérico

\d – Número

. – Qualquer caracter ou espaço

Quantificadores:

? – 0 ou 1 caracter

+ – 1 ou mais caracteres

* - 0 ou mais caracteres

Page 39: Workshop Django

Viewviews.py:

@login_required # Obrigar a fazer login

def user_view(request, username):

user = User.objects.get(username=username)

return render(request,

'detalhe_user.html',

{'user': user})

Variável

Page 40: Workshop Django

Templates

Page 41: Workshop Django

View

views.py:

def user_view(request, username):

user = User.objects.get(username=username)

return render(request,

'detalhe_user.html',

{'user': user})

Template

Page 42: Workshop Django

Templatetemplates/detalhe_user.html:

<html>

<head><title>Utilizador</title></head>

<body>

<h1>{{ user }}</h1>

<p>Último login em: {{ user.last_login }}</p>

</body>

</html>

Page 43: Workshop Django

Template>> http://localhost:8000/users/sdsantos

Page 44: Workshop Django

Loginurls.py:

(r'^login/$', 'django.contrib.auth.views.login',

{'template_name': 'login.html', 'redirect_field_name':'/'}),

(r'^logout/$', 'django.contrib.auth.views.logout_then_login',

{'login_url': '/login/?next=/'}),

settings.py:

LOGIN_URL = '/login/'

LOGIN_REDIRECT_URL = '/'

Page 45: Workshop Django

Login

templates/login.html:

<h1>Login</h1>

<form method="POST" action="">

<table>

{{ form.as_table }}

</table>

<input type="submit" value="Entrar" />

<input type="hidden" name="next" value="{{ next }}" />

</form>

Page 46: Workshop Django

Extend de templatestemplates/base.html:

<html>

<head><title>Utilizador</title></head>

<body>

{% block content %}{% endblock %}

</body>

</html>

templates/other.html:

{% extends "base.html" %}

{% block content %}

<p>O conteúdo a ser inserido no bloco acima</p>

{% endblock %}

Page 47: Workshop Django

Outras páginas daaplicação...

Page 48: Workshop Django

Extras(?)