32
De Zero à Web com Python e Django Um guia para o empreendedorismo digital

De Zero à Web com Python e Django

Embed Size (px)

DESCRIPTION

Um guia para o empreendedorismo digital

Citation preview

De Zero à Web com Python e Django

Um guia para o empreendedorismo digital

Osvaldo Santana Neto• https://osantana.me

• Python e Django

• Empreendedor em "modo de espera”

• Side Projects

• Bootstrapping

• Titans Solutions

• Empresa de SP

• Trabalho Remoto

EmpreendedorismoSe é difícil de soletrar é difícil de fazer?

Fui enganado! Cadê o Python e o Django?

Calma... Calma... A gente chega lá...

Como empreender?

Você precisará de...

• Uma idéia válida para executar

• Algum dinheiro (~R$100)

• E tempo para trabalhar no projeto

Ideias• Quando esbarrar em um problema

anote em um papel

• Revisite o problema proponha soluções (ideias)

• Faça uma planilha para classificar as ideias

• Escolha uma e valide (Business Model Canvas e entrevistas)

• Ideias simples são mais poderosas

• Não se distraia com ideias novas. Anote-as.

Ideia & Execução• Ideias são um multiplicador de

valor da execução

• A execução é que tem valor

• Ideia boa e bem executada é o melhor cenário

• http://sivers.org/multiply

• Validação de ideias

• Conheça o mercado

• Tenha "paixão"

Como conseguirdinheiro?

Inverta o raciocínio: O que eu consigo fazer com o dinheiro que tenho?

Como conseguir tempo?

Inverta o raciocínio: O que eu consigo fazer com o tempo que tenho?

Quem quer faz.Quem não quer inventa

desculpas

Palavras Chaves• Bootstrapping

• Side-Project

• Passive Income

• Cuidado com picaretagem!

• Minimum Viable Product

• Cuidado com:

• Eventos de startup, busca por investimento/financiamento, …

Execução Passo a Passo• Aprenda Python & Django 😄

• Escolha um nome

• Registre um domínio (~R$30)

• Escolha uma hospedagem (grátis~$9/mês)

• Quickstartup (grátis~$49)

• Tráfego (grátis~infinito)

• Feedback

Python & Django• https://osantana.me/pydjango

• Python - Linguagem

• Guido van Rossum

• Lançada em 1989

• Monty Python

• Django - Framework Web

• Jacob K. Moss & Adrian Holovaty

• Lançado em 2003

• Django Reinhardt

Python• Linguagem de uso geral

• Web, Mobile, Desktop, …

• Multiplataforma

• Unix, Linux, OS X, e até a porcaria do Windows

• OOP

• Suporte a código procedural e funcional

• Interpretada (com compilação transparente de bytecode)

• Linguagem aberta / Open Source

#!/usr/bin/env python3# coding: utf-8# programa1.py - Primeiro programa

"""Importa o módulo random e sorteiaum número inteiro entre 1 e 100"""

import random

numero = random.randint(1, 100)escolha = 0tentativas = 0

print("Acerte o número que sorteei com o menor número de tentativas.")

while escolha != numero: escolha = int(input("Digite um número inteiro entre 1 e 100: ")) tentativas += 1

if escolha < numero: print("O número %s é menor que o sorteado." % (escolha,)) elif escolha > numero: print("O número %s é maior que o sorteado." % (escolha,))

print("Parabéns! Você acertou o número com %s tentativas." % (tentativas,))

#!/usr/bin/env python3# coding: utf-8

class No(object): def __init__(self, questao=None, sim=None, nao=None): self._sim = sim self._nao = nao self._questao = questao

def start(self): if self.ask("Esse animal {}".format(self._questao), sn=True): self._sim = self._sim.start() else: self._nao = self._nao.start() return self

def ask(self, questao, sn=False): resposta = "" while resposta == "": resposta = input("{}? {}".format(questao, "(s/n) " if sn else "")) return resposta if not sn else (resposta[0].lower() == "s")

class Animal(No): def __init__(self, nome): super(Animal, self).__init__(nome) self._nome = nome

def start(self): if not self.ask("É um(a) {}".format(self._nome), sn=True): animal = self.ask("Qual é o animal") questao = self.ask("O que um {} faz que {} não faz".format(animal, self._nome)) return No(questao, Animal(animal), self)

print("Acertei!") return self

def main(): raiz = No("vive na água", Animal("baleia"), Animal("macaco"))

while True: raiz.start() if not raiz.ask("Jogar novamente", sn=True): break

if __name__ == '__main__': main()

$ python3 animais.pyEsse animal vive na água? (s/n) nÉ um(a) macaco? (s/n) nQual é o animal? cachorroO que um cachorro faz que macaco não faz? é domesticadoJogar novamente? (s/n) sEsse animal vive na água? (s/n) nEsse animal é domesticado? (s/n) sÉ um(a) cachorro? (s/n) sAcertei!

Django• Framework Web Ágil

• DRY - Don’t Repeat Yourself

• MVC ou MTV (Model/View/Controller, Model/Template/View)

• ORM ➡️ Banco de Dados Relacional

• Postgres, MySQL, Oracle, …

• Instagram, Pinterest, Disqus, …

# coding: utf-8

from django.db import modelsfrom django.core.urlresolvers import reversefrom django.utils.translation import ugettext_lazy as _

CONTACT_STATUS = ( ("N", _("New")), ("O", _("Ongoing")), ("R", _("Resolved")), ("C", _("Closed")), ("I", _("Invalid")),)

class Contact(models.Model): status = models.CharField(_("status"), max_length=1, choices=CONTACT_STATUS, default="N") created_at = models.DateTimeField(_("created at"), auto_now_add=True) updated_at = models.DateTimeField(_("updated at"), auto_now=True) name = models.CharField(_("name"), max_length=255) email = models.EmailField(_("email"), max_length=255) phone = models.CharField(_("phone"), max_length=100, blank=True) message = models.TextField(_("message"))

@property def admin_url(self): return reverse("admin:contacts_contact_change", args=(self.pk,))

# coding: utf-8

from django.contrib import admin

from .models import Contact

class ContactAdmin(admin.ModelAdmin): list_display = ('updated_at', 'name', 'email', 'phone', 'status') list_display_links = ('updated_at', 'name', 'email', 'phone') list_editable = ("status",) list_filter = ('status',) search_fields = ('name', 'email') ordering = ("-updated_at",)

admin.site.register(Contact, ContactAdmin)

Interface de Admin

Interface de Admin

QuickstartupEm breve...

Quickstartup

Quickstartup

Quickstartup

Ação!• Escolha um nome (domínio livre)

• Registre um domínio

• http://registro.br/ ouhttps://gandi.net

• Escolha uma hospedagem

• Amazon AWS (grátis 1 ano)

• Heroku (plano básico grátis)

• DigitalOcean ($5/mês)

• http://j.mp/vpsdigi

• Outras alternativas mais baratas!

Marketing• Launch

• Feedback

• Analytics

• Interação

• Iterate & Pivot

• Growth Hacking

• Sales Pipeline (B2B)

Fail Fast, Fail CheapNão deu certo? Fecha a parte pra outra.