SlideShare ist ein Scribd-Unternehmen logo
1 von 38
Curso de Python
Aula 8 - Tópicos Especiais
          Bruno Gama Catão
      brunogamacatao@gmail.com
Agenda

• Django + Adobe Flex;
• PyGame;
• Django + UOL PagSeguro;
• Django + Apache;
• Dicas.
Django + Adobe Flex
• Aplicações web são normalmente organizadas em 3
  camadas:

                 Apresentação

                      Lógica

                      Dados

• Django acelera muito o desenvolvimento das camadas
  de lógica e de dados, mas não faz muito pela
  camada de apresentação.
Camada de
     Apresentação
                Aplicações+
                  Web+



Baseadas+
                   RIA+         HTML5+
em+HTML+



  Microso<+
                Adobe+Flex+   Java+FX+
  Siverlight+
Adobe Flex
• Motivação:
  • Cerca de 95% dos browsers têm o plugin
    do Flash instalado;
 • Desenvolvimento de aplicações web, para
    diferentes browsers, com HTML e CSS é
    difícil;
• A tecnologia Adobe Flex produz aplicações
  web “bonitas” de forma mais produtiva.
Arquitetura
           Layout
MXML$


                     SWF$
        Flex%SDK%
                    (Flash)$

 AS$
          Lógica
Ferramentas
•   Adobe Flex SDK:
    •   Grátis;
    •   Compilador (linha de comando) de arquivos MXML e AS para
        SWF;
    •   Versões para Windows, Linux e Mac.
•   Adobe Flex Builder:
    •   Editor visual integrado com o Eclipse;
    •   Ferramenta paga:
        •   Versão profissional: R$ 400,00
        •   Versão acadêmica: Grátis;
        •   Versões para Windows e Mac.
Integração de Flex com
Tecnologias de Servidor
• Flex é uma tecnologia apenas para camada
  de apresentação;
• O lado servidor da aplicação pode ser
  implementado com a tecnologia que
  preferir (Java, PHP, Python, Ruby, .NET, etc);
• A comunicação pode ser feita:
 • WebServices (XML ou JSON); lento e genérico
 • Canais AMF. solução mais rápida e simples
Antes de começar
• LEMBREM-SE !!!
• Abram o prompt de comando (terminal);
• Configurem as variáveis de ambiente do seu
  computador:
   • No Windows (Linux não precisa):
   PATH=%PATH%;C:Python26;C:Python26scripts
PyAMF
• Implementação do protocolo AMF para a
  linguagem de programação Python;
• Instalação:
 • Setup tools:
    • easy_install pyamf prefira esta forma
 • Ou, download do site http://pyamf.org
Instalando o
             Flex Builder
• O Adobe Flex Builder vem de duas formas:
 • Plugin para o Eclipse;
 • Distribuição do Eclipse adaptada;
• Para esta aula dispomos do Adobe Flex Builder
  Eclipse Plugin versão 3.0;
• Atenção, este plugin apenas funciona na versão
  3.4 (Ganymede) do Eclipse.
Configurando
     Django + PyAmf

• Dentro da sua aplicação crie um módulo
  chamado amfgateway;
• Modifique o módulo urls principal, criando
  uma regra para o amf gateway.
Módulo amfgateway
import pyamf
from pyamf.remoting.gateway.django import DjangoGateway
import meuprojeto.aplicacao.views as views
from meuprojeto.aplicacao import models

services = {
    'Servicos': views,
}

pyamf.register_package(models, 'meuprojeto.aplicacao.models')

meuGateway = DjangoGateway(services, expose_request=False)
Módulos urls


urlpatterns = patterns('',
    ...
    (r'^gateway/', 'meuprojeto.aplicacao.amfgateway.meuGateway'),
)
E no lado Flex ?


<mx:RemoteObject id="servicos" endpoint="http://localhost:8000/gateway/" destination="Servicos">
	   ...
</mx:RemoteObject>
Exemplo
PyGame

• Implementação da biblioteca SDL para a
  linguagem de programação Python;
• Permite a utilização de imagens, sons e
  dispositivos de entrada facilmente em
  programas Python.
Primeiro exemplo
Primitivas e Teclado
Imagens
Sons
UOL PagSeguro

• O PagSeguro é um componente que
  permite a sites receber pagamentos de
  diferentes fontes:
 • Cartões de crédito;
 • Boletos bancários.
UOL PagSeguro
• Funcionamento:
 • Você deve se cadastrar no PagSeguro:
   • http://www.pagseguro.com.br
 • Seu site deve enviar os dados para o PagSeguro
    com o seu número de cliente;
 • O PagSeguro irá intermediar todo o processo de
    pagamento;
 • Assim que o pagamento tenha sido confirmado, o
    PagSeguro irá notificar a sua aplicação.
Formulário
<form action='https://pagseguro.uol.com.br/security/webpagamentos/webpagto.aspx' method='POST'>
	   <input type="hidden" name="email_cobranca" value="brunogamacatao@gmail.com"/>
	   <input type="hidden" name="tipo"           value="CP"/>
	   <input type="hidden" name="moeda"          value="BRL"/>
	   <input type="hidden" name="ref_transacao" value="{{referenciaCompra}}"/>
	   <input type="hidden" name="cliente_nome"   value="{{nomeCompleto}}"/>
	   <input type="hidden" name="cliente_cep"    value="{{cep}}"/>
	   <input type="hidden" name="cliente_end"    value="{{endereco}}"/>
	   <input type="hidden" name="cliente_num"    value="{{numero}}"/>
	   <input type="hidden" name="cliente_compl" value="{{complemento}}"/>
	   <input type="hidden" name="cliente_bairro" value="{{bairro}}"/>
	   <input type="hidden" name="cliente_cidade" value="{{cidade.nome}}"/>
	   <input type="hidden" name="cliente_uf"     value="{{estado.sigla}}"/>
	   <input type="hidden" name="cliente_pais"   value="BRA"/>
	   <input type="hidden" name="cliente_ddd"    value="{{telefone_ddd}}"/>
	   <input type="hidden" name="cliente_tel"    value="{{telefone}}"/>
	   <input type="hidden" name="cliente_email" value="{{email}}"/>
	   <input type="hidden" name="encoding"       value="utf-8"/>

	   {{for produto in produtos}}
	   <input type="hidden" name="item_id_{{forloop.counter}}"      value="{{produto.id}}"/>
	   <input type="hidden" name="item_descr_{{forloop.counter}}"   value="{{produto.titulo}}"/>
	   <input type="hidden" name="item_quant_{{forloop.counter}}"   value="{{produto.quantidade}}"/>
	   <input type="hidden" name="item_valor_{{forloop.counter}}"   value="{{produto.valor * 10)}"/>
	   <input type="hidden" name="item_frete_{{forloop.counter}}"   value="{{produto.valor_frete}}"/>
	   <input type="hidden" name="item_peso_{{forloop.counter}}"    value="{{produto.peso}}"/>
	   {{end for}}
</form>
Módulo pagseguro.py
import sys
import urllib2, urllib
from django.http import HttpResponse
 
 
class Pagamento(object):
 
    def _conectar(self, url, params):
        query_str = urllib.urlencode(params)
        req = urllib2.Request(url, query_str)
        f = urllib2.urlopen(req)
        conteudo = f.read()
        f.close()
        return conteudo
 
    def _enviar(self, url, params):
        retorno = self._conectar(url, params)
        if retorno.lower() == 'verificado':
            return True
        else:
            return False
 
PS_URL = 'https://pagseguro.uol.com.br/Security/NPI/Default.aspx'
class PagSeguro(Pagamento):
    def processar(self, token, params, url=PS_URL):
        if not params:
            return False
        else:
            lista = []
            for key in params.keys():
                lista.append((key,params[key]))
            lista.append(('Comando', 'validar'))
            lista.append(('Token', token))
 
            return self._enviar(url, lista)
Função concluir
def concluir(request):
    if request.method == 'POST':
        # token gerado no painel de controle do PagSeguro
        token = '12345699CA2AAAF4599EA697BB2F7FFF'
        p = PagSeguro()
        retorno = p.processar(token, request.POST)
 
        if retorno == True:
            try:
                 # Cadastra os dados recebidos no banco de dados.
                 # Utilize o request.POST.get('nomedocampo') para obter os valores
            except:
                 pass
            return HttpResponse('Ok')
        else:
            return HttpResponse('Error')
 
    else:
        # Carrega tela contendo a mensagem de compra realizada
        return direct_to_template(request,'carrinho/concluir.html')
Django + Apache

• O servidor web integrado do Django deve
  ser utilizado apenas para desenvolvimento
  e testes;
• Quando for implantar a sua aplicação em
  produção utilize o Apache.
Apache
• Servidor Web mais utilizado no mundo;
• Gratuito e de código aberto;
• Disponível para todas os sistemas
  operacionais;
• Nativamente serve páginas estáticas;
• Pode servir conteúdo dinâmico a partir de
  módulos (plugins) instalados.
mod_python
• Módulo para execução de scripts python
  dentro do servidor web;
• Os módulos funcionam associando padrões
  de URL a arquivos (no caso do python,
  scripts);
• Instalação:
 • sudo apt-get libapache2-mod-python
Adicionando a aplicação
      ao Apache
• Edite o arquivo httpd.conf:
 • sudo gedit /etc/apache2/http.conf
• Adicione as seguintes linhas:
 <Location "/meusite/">
     SetHandler python-program
     PythonHandler django.core.handlers.modpython
     SetEnv DJANGO_SETTINGS_MODULE meusite.settings
     PythonOption django.root /meusite
     PythonDebug On
     PythonPath "['/home/local/projetos'] + sys.path"
 </Location>
Adicionando os
    arquivos estáticos
• Para que o módulo admin continue
  funcionando no Apache é necessário copiar
  os seus arquivos estáticos para o Apache;
• Copie todos os arquivos da pasta:
 • django/contrib/admin/media
• Para a pasta:
 • /var/www
Dicas
• Quem se interessa pelo desenvolvimento em sistemas
  móveis, atenção ao Python S60;
• Para utilizar é necessário baixar o Nokia S60 SDK;
• Bibliotecar para gerar relatórios PDF em Python: PISA;
• Os softwares Inkscape, GIMP, Blender e BrOffice são
  feitos, totalmente ou parcialmente, em Python e
  podem ser extendidos em Python através de plugins
  ou de macros;
• O livro Python para Desenvolvedores é
  gratuito.

Weitere ähnliche Inhalte

Was ist angesagt?

Servidor de Aplicação Web: CherryPy - Python
Servidor de Aplicação  Web: CherryPy - PythonServidor de Aplicação  Web: CherryPy - Python
Servidor de Aplicação Web: CherryPy - Pythonantonio sérgio nogueira
 
Desenvolvendo uma Aplicação WEB usando o Python e o CherryPy
Desenvolvendo uma Aplicação WEB usando o Python e o CherryPyDesenvolvendo uma Aplicação WEB usando o Python e o CherryPy
Desenvolvendo uma Aplicação WEB usando o Python e o CherryPyantonio sérgio nogueira
 
Código legado - PHP Conference Brasil - 2014
Código legado - PHP Conference Brasil - 2014Código legado - PHP Conference Brasil - 2014
Código legado - PHP Conference Brasil - 2014Michael Castillo Granados
 
Como criar um plugin para WordPress
Como criar um plugin para WordPressComo criar um plugin para WordPress
Como criar um plugin para WordPressLeandrinho Vieira
 
Treinamento Básico de Django
Treinamento Básico de DjangoTreinamento Básico de Django
Treinamento Básico de DjangoLeandro Zanuz
 
Entre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando GearmanEntre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando GearmanElton Minetto
 
Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.Vinícius de Paula
 

Was ist angesagt? (20)

Python cherrypy
Python cherrypyPython cherrypy
Python cherrypy
 
Servidor de Aplicação Web: CherryPy - Python
Servidor de Aplicação  Web: CherryPy - PythonServidor de Aplicação  Web: CherryPy - Python
Servidor de Aplicação Web: CherryPy - Python
 
Desenvolvendo uma Aplicação WEB usando o Python e o CherryPy
Desenvolvendo uma Aplicação WEB usando o Python e o CherryPyDesenvolvendo uma Aplicação WEB usando o Python e o CherryPy
Desenvolvendo uma Aplicação WEB usando o Python e o CherryPy
 
PHP 7
PHP 7PHP 7
PHP 7
 
Python 01
Python 01Python 01
Python 01
 
Código legado - PHP Conference Brasil - 2014
Código legado - PHP Conference Brasil - 2014Código legado - PHP Conference Brasil - 2014
Código legado - PHP Conference Brasil - 2014
 
Java script aula 02 - operadores
Java script   aula 02 - operadoresJava script   aula 02 - operadores
Java script aula 02 - operadores
 
Java script aula 05 - funções
Java script   aula 05 - funçõesJava script   aula 05 - funções
Java script aula 05 - funções
 
Java script - funções
Java script - funçõesJava script - funções
Java script - funções
 
Java script aula 10 - angularjs
Java script   aula 10 - angularjsJava script   aula 10 - angularjs
Java script aula 10 - angularjs
 
Python 02
Python 02Python 02
Python 02
 
Como criar um plugin para WordPress
Como criar um plugin para WordPressComo criar um plugin para WordPress
Como criar um plugin para WordPress
 
Treinamento Básico de Django
Treinamento Básico de DjangoTreinamento Básico de Django
Treinamento Básico de Django
 
Java script aula 08 - formulários
Java script   aula 08 - formuláriosJava script   aula 08 - formulários
Java script aula 08 - formulários
 
Python 05
Python 05Python 05
Python 05
 
Entre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando GearmanEntre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando Gearman
 
Java script aula 07 - j-query
Java script   aula 07 - j-queryJava script   aula 07 - j-query
Java script aula 07 - j-query
 
PHP GERAL
PHP GERALPHP GERAL
PHP GERAL
 
Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.
 
Palestra
PalestraPalestra
Palestra
 

Ähnlich wie Curso Python Aula 8 Tópicos Especiais

CEPUG 2 - Bem-vindo a Framework CodeIgniter
CEPUG 2 - Bem-vindo a Framework CodeIgniterCEPUG 2 - Bem-vindo a Framework CodeIgniter
CEPUG 2 - Bem-vindo a Framework CodeIgniterEric Silva
 
Ligação do Flex a um backend LAMP usando AMFPHP
Ligação do Flex a um backend LAMP usando AMFPHPLigação do Flex a um backend LAMP usando AMFPHP
Ligação do Flex a um backend LAMP usando AMFPHPelliando dias
 
2290494 integrando-flex-com-php
2290494 integrando-flex-com-php2290494 integrando-flex-com-php
2290494 integrando-flex-com-phpBrenno Abreu
 
Oficina Python e Google App Engine
Oficina Python e Google App EngineOficina Python e Google App Engine
Oficina Python e Google App EngineRodrigo Amaral
 
PHP like a super hero
PHP like a super heroPHP like a super hero
PHP like a super heroElton Minetto
 
Cakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPCakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPArlindo Santos
 
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...BrunoSouza617
 
Play Framework - FLISOL
Play Framework - FLISOLPlay Framework - FLISOL
Play Framework - FLISOLgrupoweblovers
 
Seu framework é melhor pra quê?
Seu framework é melhor pra quê?Seu framework é melhor pra quê?
Seu framework é melhor pra quê?Jaime Neto
 
Uma Introdução a ASP.NET Web API
Uma Introdução a ASP.NET Web APIUma Introdução a ASP.NET Web API
Uma Introdução a ASP.NET Web APIComunidade NetPonto
 
Integração Contínua com Cruise Control e phpUnderControl
Integração Contínua com Cruise Control e phpUnderControlIntegração Contínua com Cruise Control e phpUnderControl
Integração Contínua com Cruise Control e phpUnderControlDiego Tremper
 
Minicurso de Cakephp
Minicurso de CakephpMinicurso de Cakephp
Minicurso de CakephpCauan Cabral
 
Lampada Php Conference Brasil 2007 Palestra
Lampada Php Conference Brasil 2007 PalestraLampada Php Conference Brasil 2007 Palestra
Lampada Php Conference Brasil 2007 PalestraDavid O'Keefe
 
Iniciando com Yii Framework - Volmar Machado da Silva Neto (Rede Pampa de Com...
Iniciando com Yii Framework - Volmar Machado da Silva Neto (Rede Pampa de Com...Iniciando com Yii Framework - Volmar Machado da Silva Neto (Rede Pampa de Com...
Iniciando com Yii Framework - Volmar Machado da Silva Neto (Rede Pampa de Com...Tchelinux
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2PrinceGuru MS
 
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...Daniel Makiyama
 

Ähnlich wie Curso Python Aula 8 Tópicos Especiais (20)

CEPUG 2 - Bem-vindo a Framework CodeIgniter
CEPUG 2 - Bem-vindo a Framework CodeIgniterCEPUG 2 - Bem-vindo a Framework CodeIgniter
CEPUG 2 - Bem-vindo a Framework CodeIgniter
 
PHP no Google AppEngine
PHP no Google AppEnginePHP no Google AppEngine
PHP no Google AppEngine
 
Ligação do Flex a um backend LAMP usando AMFPHP
Ligação do Flex a um backend LAMP usando AMFPHPLigação do Flex a um backend LAMP usando AMFPHP
Ligação do Flex a um backend LAMP usando AMFPHP
 
2290494 integrando-flex-com-php
2290494 integrando-flex-com-php2290494 integrando-flex-com-php
2290494 integrando-flex-com-php
 
Oficina Python e Google App Engine
Oficina Python e Google App EngineOficina Python e Google App Engine
Oficina Python e Google App Engine
 
PHP like a super hero
PHP like a super heroPHP like a super hero
PHP like a super hero
 
Cakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPCakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHP
 
Cake Php
Cake PhpCake Php
Cake Php
 
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...
 
Play Framework - FLISOL
Play Framework - FLISOLPlay Framework - FLISOL
Play Framework - FLISOL
 
Seu framework é melhor pra quê?
Seu framework é melhor pra quê?Seu framework é melhor pra quê?
Seu framework é melhor pra quê?
 
Desafio Rest API
Desafio Rest APIDesafio Rest API
Desafio Rest API
 
Uma Introdução a ASP.NET Web API
Uma Introdução a ASP.NET Web APIUma Introdução a ASP.NET Web API
Uma Introdução a ASP.NET Web API
 
Integração Contínua com Cruise Control e phpUnderControl
Integração Contínua com Cruise Control e phpUnderControlIntegração Contínua com Cruise Control e phpUnderControl
Integração Contínua com Cruise Control e phpUnderControl
 
Minicurso de Cakephp
Minicurso de CakephpMinicurso de Cakephp
Minicurso de Cakephp
 
Modern PHP
Modern PHPModern PHP
Modern PHP
 
Lampada Php Conference Brasil 2007 Palestra
Lampada Php Conference Brasil 2007 PalestraLampada Php Conference Brasil 2007 Palestra
Lampada Php Conference Brasil 2007 Palestra
 
Iniciando com Yii Framework - Volmar Machado da Silva Neto (Rede Pampa de Com...
Iniciando com Yii Framework - Volmar Machado da Silva Neto (Rede Pampa de Com...Iniciando com Yii Framework - Volmar Machado da Silva Neto (Rede Pampa de Com...
Iniciando com Yii Framework - Volmar Machado da Silva Neto (Rede Pampa de Com...
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2
 
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
 

Mehr von Bruno Catão

Introdução às Redes Neurais - Parte 2/2
Introdução às Redes Neurais - Parte 2/2Introdução às Redes Neurais - Parte 2/2
Introdução às Redes Neurais - Parte 2/2Bruno Catão
 
Introdução às Redes Neurais - Parte 1/2
Introdução às Redes Neurais - Parte 1/2Introdução às Redes Neurais - Parte 1/2
Introdução às Redes Neurais - Parte 1/2Bruno Catão
 
React JS - Parte 2
React JS - Parte 2React JS - Parte 2
React JS - Parte 2Bruno Catão
 
React JS - Parte 1
React JS - Parte 1React JS - Parte 1
React JS - Parte 1Bruno Catão
 
Retina e Retinose Pigmentar
Retina e Retinose PigmentarRetina e Retinose Pigmentar
Retina e Retinose PigmentarBruno Catão
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScriptBruno Catão
 
Unity3d Space Shooter (Parte 1)
Unity3d Space Shooter (Parte 1)Unity3d Space Shooter (Parte 1)
Unity3d Space Shooter (Parte 1)Bruno Catão
 
Introdução ao Framework Grails
Introdução ao Framework GrailsIntrodução ao Framework Grails
Introdução ao Framework GrailsBruno Catão
 
O framework spring
O framework springO framework spring
O framework springBruno Catão
 

Mehr von Bruno Catão (15)

Introdução às Redes Neurais - Parte 2/2
Introdução às Redes Neurais - Parte 2/2Introdução às Redes Neurais - Parte 2/2
Introdução às Redes Neurais - Parte 2/2
 
Introdução às Redes Neurais - Parte 1/2
Introdução às Redes Neurais - Parte 1/2Introdução às Redes Neurais - Parte 1/2
Introdução às Redes Neurais - Parte 1/2
 
React JS - Parte 2
React JS - Parte 2React JS - Parte 2
React JS - Parte 2
 
React JS - Parte 1
React JS - Parte 1React JS - Parte 1
React JS - Parte 1
 
Node JS - Parte 4
Node JS - Parte 4Node JS - Parte 4
Node JS - Parte 4
 
Node JS - Parte 3
Node JS - Parte 3Node JS - Parte 3
Node JS - Parte 3
 
Node JS - Parte 2
Node JS - Parte 2Node JS - Parte 2
Node JS - Parte 2
 
Node JS - Parte 1
Node JS - Parte 1Node JS - Parte 1
Node JS - Parte 1
 
Retina e Retinose Pigmentar
Retina e Retinose PigmentarRetina e Retinose Pigmentar
Retina e Retinose Pigmentar
 
Mean Stack
Mean StackMean Stack
Mean Stack
 
Angular js
Angular jsAngular js
Angular js
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScript
 
Unity3d Space Shooter (Parte 1)
Unity3d Space Shooter (Parte 1)Unity3d Space Shooter (Parte 1)
Unity3d Space Shooter (Parte 1)
 
Introdução ao Framework Grails
Introdução ao Framework GrailsIntrodução ao Framework Grails
Introdução ao Framework Grails
 
O framework spring
O framework springO framework spring
O framework spring
 

Curso Python Aula 8 Tópicos Especiais

  • 1. Curso de Python Aula 8 - Tópicos Especiais Bruno Gama Catão brunogamacatao@gmail.com
  • 2. Agenda • Django + Adobe Flex; • PyGame; • Django + UOL PagSeguro; • Django + Apache; • Dicas.
  • 3. Django + Adobe Flex • Aplicações web são normalmente organizadas em 3 camadas: Apresentação Lógica Dados • Django acelera muito o desenvolvimento das camadas de lógica e de dados, mas não faz muito pela camada de apresentação.
  • 4. Camada de Apresentação Aplicações+ Web+ Baseadas+ RIA+ HTML5+ em+HTML+ Microso<+ Adobe+Flex+ Java+FX+ Siverlight+
  • 5. Adobe Flex • Motivação: • Cerca de 95% dos browsers têm o plugin do Flash instalado; • Desenvolvimento de aplicações web, para diferentes browsers, com HTML e CSS é difícil; • A tecnologia Adobe Flex produz aplicações web “bonitas” de forma mais produtiva.
  • 6. Arquitetura Layout MXML$ SWF$ Flex%SDK% (Flash)$ AS$ Lógica
  • 7. Ferramentas • Adobe Flex SDK: • Grátis; • Compilador (linha de comando) de arquivos MXML e AS para SWF; • Versões para Windows, Linux e Mac. • Adobe Flex Builder: • Editor visual integrado com o Eclipse; • Ferramenta paga: • Versão profissional: R$ 400,00 • Versão acadêmica: Grátis; • Versões para Windows e Mac.
  • 8. Integração de Flex com Tecnologias de Servidor • Flex é uma tecnologia apenas para camada de apresentação; • O lado servidor da aplicação pode ser implementado com a tecnologia que preferir (Java, PHP, Python, Ruby, .NET, etc); • A comunicação pode ser feita: • WebServices (XML ou JSON); lento e genérico • Canais AMF. solução mais rápida e simples
  • 9. Antes de começar • LEMBREM-SE !!! • Abram o prompt de comando (terminal); • Configurem as variáveis de ambiente do seu computador: • No Windows (Linux não precisa): PATH=%PATH%;C:Python26;C:Python26scripts
  • 10. PyAMF • Implementação do protocolo AMF para a linguagem de programação Python; • Instalação: • Setup tools: • easy_install pyamf prefira esta forma • Ou, download do site http://pyamf.org
  • 11. Instalando o Flex Builder • O Adobe Flex Builder vem de duas formas: • Plugin para o Eclipse; • Distribuição do Eclipse adaptada; • Para esta aula dispomos do Adobe Flex Builder Eclipse Plugin versão 3.0; • Atenção, este plugin apenas funciona na versão 3.4 (Ganymede) do Eclipse.
  • 12. Configurando Django + PyAmf • Dentro da sua aplicação crie um módulo chamado amfgateway; • Modifique o módulo urls principal, criando uma regra para o amf gateway.
  • 13. Módulo amfgateway import pyamf from pyamf.remoting.gateway.django import DjangoGateway import meuprojeto.aplicacao.views as views from meuprojeto.aplicacao import models services = { 'Servicos': views, } pyamf.register_package(models, 'meuprojeto.aplicacao.models') meuGateway = DjangoGateway(services, expose_request=False)
  • 14. Módulos urls urlpatterns = patterns('', ... (r'^gateway/', 'meuprojeto.aplicacao.amfgateway.meuGateway'), )
  • 15. E no lado Flex ? <mx:RemoteObject id="servicos" endpoint="http://localhost:8000/gateway/" destination="Servicos"> ... </mx:RemoteObject>
  • 17. PyGame • Implementação da biblioteca SDL para a linguagem de programação Python; • Permite a utilização de imagens, sons e dispositivos de entrada facilmente em programas Python.
  • 20.
  • 22.
  • 23. Sons
  • 24.
  • 25. UOL PagSeguro • O PagSeguro é um componente que permite a sites receber pagamentos de diferentes fontes: • Cartões de crédito; • Boletos bancários.
  • 26. UOL PagSeguro • Funcionamento: • Você deve se cadastrar no PagSeguro: • http://www.pagseguro.com.br • Seu site deve enviar os dados para o PagSeguro com o seu número de cliente; • O PagSeguro irá intermediar todo o processo de pagamento; • Assim que o pagamento tenha sido confirmado, o PagSeguro irá notificar a sua aplicação.
  • 28. <form action='https://pagseguro.uol.com.br/security/webpagamentos/webpagto.aspx' method='POST'> <input type="hidden" name="email_cobranca" value="brunogamacatao@gmail.com"/> <input type="hidden" name="tipo" value="CP"/> <input type="hidden" name="moeda" value="BRL"/> <input type="hidden" name="ref_transacao" value="{{referenciaCompra}}"/> <input type="hidden" name="cliente_nome" value="{{nomeCompleto}}"/> <input type="hidden" name="cliente_cep" value="{{cep}}"/> <input type="hidden" name="cliente_end" value="{{endereco}}"/> <input type="hidden" name="cliente_num" value="{{numero}}"/> <input type="hidden" name="cliente_compl" value="{{complemento}}"/> <input type="hidden" name="cliente_bairro" value="{{bairro}}"/> <input type="hidden" name="cliente_cidade" value="{{cidade.nome}}"/> <input type="hidden" name="cliente_uf" value="{{estado.sigla}}"/> <input type="hidden" name="cliente_pais" value="BRA"/> <input type="hidden" name="cliente_ddd" value="{{telefone_ddd}}"/> <input type="hidden" name="cliente_tel" value="{{telefone}}"/> <input type="hidden" name="cliente_email" value="{{email}}"/> <input type="hidden" name="encoding" value="utf-8"/> {{for produto in produtos}} <input type="hidden" name="item_id_{{forloop.counter}}" value="{{produto.id}}"/> <input type="hidden" name="item_descr_{{forloop.counter}}" value="{{produto.titulo}}"/> <input type="hidden" name="item_quant_{{forloop.counter}}" value="{{produto.quantidade}}"/> <input type="hidden" name="item_valor_{{forloop.counter}}" value="{{produto.valor * 10)}"/> <input type="hidden" name="item_frete_{{forloop.counter}}" value="{{produto.valor_frete}}"/> <input type="hidden" name="item_peso_{{forloop.counter}}" value="{{produto.peso}}"/> {{end for}} </form>
  • 30. import sys import urllib2, urllib from django.http import HttpResponse     class Pagamento(object):   def _conectar(self, url, params): query_str = urllib.urlencode(params) req = urllib2.Request(url, query_str) f = urllib2.urlopen(req) conteudo = f.read() f.close() return conteudo   def _enviar(self, url, params): retorno = self._conectar(url, params) if retorno.lower() == 'verificado': return True else: return False   PS_URL = 'https://pagseguro.uol.com.br/Security/NPI/Default.aspx' class PagSeguro(Pagamento): def processar(self, token, params, url=PS_URL): if not params: return False else: lista = [] for key in params.keys(): lista.append((key,params[key])) lista.append(('Comando', 'validar')) lista.append(('Token', token))   return self._enviar(url, lista)
  • 32. def concluir(request): if request.method == 'POST': # token gerado no painel de controle do PagSeguro token = '12345699CA2AAAF4599EA697BB2F7FFF' p = PagSeguro() retorno = p.processar(token, request.POST)   if retorno == True: try: # Cadastra os dados recebidos no banco de dados. # Utilize o request.POST.get('nomedocampo') para obter os valores except: pass return HttpResponse('Ok') else: return HttpResponse('Error')   else: # Carrega tela contendo a mensagem de compra realizada return direct_to_template(request,'carrinho/concluir.html')
  • 33. Django + Apache • O servidor web integrado do Django deve ser utilizado apenas para desenvolvimento e testes; • Quando for implantar a sua aplicação em produção utilize o Apache.
  • 34. Apache • Servidor Web mais utilizado no mundo; • Gratuito e de código aberto; • Disponível para todas os sistemas operacionais; • Nativamente serve páginas estáticas; • Pode servir conteúdo dinâmico a partir de módulos (plugins) instalados.
  • 35. mod_python • Módulo para execução de scripts python dentro do servidor web; • Os módulos funcionam associando padrões de URL a arquivos (no caso do python, scripts); • Instalação: • sudo apt-get libapache2-mod-python
  • 36. Adicionando a aplicação ao Apache • Edite o arquivo httpd.conf: • sudo gedit /etc/apache2/http.conf • Adicione as seguintes linhas: <Location "/meusite/"> SetHandler python-program PythonHandler django.core.handlers.modpython SetEnv DJANGO_SETTINGS_MODULE meusite.settings PythonOption django.root /meusite PythonDebug On PythonPath "['/home/local/projetos'] + sys.path" </Location>
  • 37. Adicionando os arquivos estáticos • Para que o módulo admin continue funcionando no Apache é necessário copiar os seus arquivos estáticos para o Apache; • Copie todos os arquivos da pasta: • django/contrib/admin/media • Para a pasta: • /var/www
  • 38. Dicas • Quem se interessa pelo desenvolvimento em sistemas móveis, atenção ao Python S60; • Para utilizar é necessário baixar o Nokia S60 SDK; • Bibliotecar para gerar relatórios PDF em Python: PISA; • Os softwares Inkscape, GIMP, Blender e BrOffice são feitos, totalmente ou parcialmente, em Python e podem ser extendidos em Python através de plugins ou de macros; • O livro Python para Desenvolvedores é gratuito.

Hinweis der Redaktion

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n