Python para web com django

Olar

Jonhnatha Trigueiro

A.k.a "Joey"

 

Software Engineer

@ Nexus Edge



Python

O que é 

  • Linguagem de programação
  • De propósito geral
  • Orientada à objetos
  • Interpretada
  • Estável
  • Múltiplas implementações
  • Bem documentada

kivy.org/

https://readthedocs.org/projects/python-gtk-3-tutorial/



Django

Vantagens

  • Desenvolvimento Acelerado;
  • Django Admin <3;
  • Customizável;
  • Comunidade fervorosa;
  • ORM e Migrações;
  • Extensível;
  • Ready out of the box!

Hello django

Miniagenda

Jogo rápido

from django.db import models


class Contato(models.Model):

    nome = models.CharField(max_length=100)
    telefone = models.CharField(max_length=32)

    def __unicode__(self):
        return self.nome

agenda/models.py

from django.contrib import admin
from agenda.models import Contato


admin.site.register(Contato)

agenda/admin.py

# (...) CODE

# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'agenda'
]

# (...) CODE

pythondaynatal/settings.py

Estrutura

padrão

database

migrações

BEGIN;
--
-- Create model Contato
--
CREATE TABLE "agenda_contato" 
    ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, 
     "nome" varchar(100) NOT NULL, "telefone" varchar(32) NOT NULL);

COMMIT;

python manage.py sqlmigrate agenda 0001

database no django

  • Não toca no SQL
  • Prepara a evolução do banco
  • Mesmo modelo, qualquer banco
  • Prazer, Database Refactoring

extensões

Vamos ver o que tem?



PIP

Pacotes

7717

(até agora)

Django packages

https://www.djangopackages.com/

no servidor

ideia de como funciona

Acionando
lampadas?!

Como seria possível?

  • Django
  • PySerial
  • Arduino

Página com ação

  • Django processa ação na view;
  • Na view abre a porta serial;
  • Escreve comando via serial;
  • Arduino Interpreta comando e liga lâmpada.

liga_desliga.ino

// pins for the LEDs:
const int redPin = 13;

void setup() {
  Serial.begin(9600);
  pinMode(redPin, OUTPUT);
}

void loop() {
  while (Serial.available() > 0) {

    char serial_data = Serial.read();

    if (serial_data == '1') {
      digitalWrite(redPin, HIGH);
    } else {
      digitalWrite(redPin, LOW);
    }
  }
}

leds/views.py

from django.shortcuts import HttpResponse, render
import serial

port = serial.Serial('/dev/cu.usbmodem641', baudrate=9600)

def liga(request):
    port.write('1')

    return HttpResponse('Deve ter ligado =p 
        <a href="javascript:history.back(-1)">VOLTAR</a>')


def desliga(request):
    port.write('0')

    return HttpResponse('Deve ter Desligado :D 
        <a href="javascript:history.back(-1)">VOLTAR</a>')

def led(request):
    return render(request, 'index.html')

def cam(request):
    return render(request, 'cam.html')

Deploy

Usando fabric

Métricas

com opbeat

GeoDjango

Two Scoops

Of django

Dúvidas?

Obrigado ;)

@jjrt42

fb.com/joepreludian

joepreludian.github.io

Django

By Jonhnatha Trigueiro