Blog

Postado em em 13 de setembro de 2021

Django no Python – Como Sair do Zero [Primeiro Site]

Nessa aula eu vou te mostrar uma parte inicial de Django no Python para que você possa sair do zero e conseguir criar o seu primeiro site!

Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo ou acesse o nosso canal do YouTube!

Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:

Resumo

Nessa aula eu vou te ensinar como criar site com Django no Python para que você tenha uma noção de como pode fazer esse procedimento.

Você provavelmente já ouvir falar nesse framework no Python, mas hoje eu vou te mostrar como ele funciona e como pode te auxiliar.

Como Sair do Zero em Django no Python

Você sabe o que é Django Python ou sabe para que serve? Hoje eu vou te mostrar o que você precisa saber sobre o Framework Django e como você vai poder utilizá-lo para criar seu primeiro site.

É isso mesmo, vamos utilizar o Python Django para poder fazer a criação de um site simples para que você possa entender e começar a praticar para adaptar ao seu trabalho.

Como usar o Django no Python

Como falamos anteriormente o Django é um framework para desenvolvimento de sites, mas o que é um framework?

Um framework nada mais é do que uma estrutura ou uma biblioteca para facilitar a nossa vida em algumas atividades.

Vamos ter diversos tipos de framework, mas hoje vamos abordar o Django que vai te ajudar na construção do seu primeiro site.

Vamos te mostrar como usar um framework e claro, como fazer a criação de site com Django.

IMPORTANTE: Antes de iniciar com o Django é interessante que você já tenha algum conhecimento em Python para que isso fique mais fácil. Não que você não possa seguir essa aula, mas com conhecimento em Python isso vai ficar melhor. Caso queira ver outros conteúdos de Python para se familiarizar basta clicar aqui.

OBS: Outro ponto importante é que além dessa aula nós disponibilizamos um minicurso gratuito de criação de site com Django que pode complementar os seus estudos!

A ideia de usar um framework é justamente para que não precisarmos escrever todos os códigos do zero, então já vai facilitar bastante!

Nessa hora é importante que você crie uma pasta onde vai fazer a criação do ambiente virtual para que fique tudo organizado e você saiba exatamente onde fez a instalação de tudo!

Nós vamos começar criando um ambiente virtual, se você ainda não sabe o que é ou como criar basta clicar aqui que temos um post explicando o passo a passo de criação desse ambiente!

Criado o ambiente virtual nós vamos entrar nele e já fazer a instalação do Django, pode fazer no próprio prompt de comando do Jupyter Anaconda mesmo com o código pip install Django.

Agora nós vamos criar um projeto no PyCharm e aconselho que você faça o passo a passo nele também para que tenha esse post como base.

Assim vai poder consultar sempre que tiver algum problema, depois você pode modificar o seu editor de sua preferência.

Ao abrir o programa pode ser que venha algum projeto já aberto, mas nós vamos criar um novo projeto na opção New Project!

Projeto no Pycharm
Projeto no Pycharm

Ao clicar nessa opção nós vamos até Location e vamos selecionar a pasta que criamos e colocamos o nosso ambiente virtual.

Em seguida vamos marcar a opção Previously configure interpreter, que é para utilizar um interpretador previamente configurado.

Se a sua opção não estiver disponível ao clicar na setinha, basta clicar nos 3 pontos, selecionar a opção Conda Environment que você vai poder selecionar o ambiente virtual que foi criado para utilizarmos.

Depois basta clicar em Create pra criar esse projeto!

Agora dentro do terminal do PyCharm nós vamos utilizar o seguinte comando para iniciar o nosso projeto em Django e com isso já teremos algumas estruturas criadas.

Iniciando o projeto
Iniciando o projeto

Na árvore do projeto você vai ver que já temos algumas pastas e arquivos após a utilização desse comando.

Árvore de arquivos
Árvore de arquivos

O próximo passo é entrar na pasta mysite para que possamos rodar o nosso servidor e testar se está tudo ok.

Rodando o servidor
Rodando o servidor

Aqui temos o comando para entrar em uma pasta e logo em seguida o comando para rodar esse servidor local.

IMPORTANTE: Se o segundo código não fizer nada você pode alterar para python manage.py runserver que vai funcionar normalmente.

Resultados ao rodar o servidor
Resultados ao rodar o servidor

Ao terminar de rodar você vai ver que agora tem um link disponível, vamos clicar nele para verificar se tudo está certo.

Página com a confirmação de instalação
Página com a confirmação de instalação

Aqui ele fala que a instalação foi feita com sucesso!

Agora dentro do terminal vamos pressionar CTRL + C para parar o servidor.

Criando um aplicativo
Criando um aplicativo

Vamos utilizar esse comando para criar um aplicativo (comando + nome), lembrando que não é um aplicativo de celular, mas um aplicativo para o site em si.

OBS: Pode ser para uma área específica, lembrando que qualquer dúvida pode seguir a documentação do Django.

Pasta e arquivos criados
Pasta e arquivos criados

Novamente vamos verificar que uma nova pasta foi criada desse polls que será nossa enquete.

Agora dentro dessa pasta polls nós vamos abrir o arquivo views.py para podermos criar uma visualização da nossa página inicial.

from django.shortcuts import render
from django.http import HttpResponse

# Create your views here.

def index(request):
    return HttpResponse ("Olá esse é o meu primeiro site")

Esse é o código que vamos utilizar para fazer a tentativa de acessar o site, mas vamos precisar criar dentro dessa pasta polls um outro arquivo em Python chamado urls.py.

Para que possamos configurar um padrão de url e vamos utilizar as informações desse views para isso.

from django.urls import path

from . import views

app_name = 'polls'
urlpatterns = [
path('',views.index, name='index'),
path('<int:question_id>/results/', views.results, name='results'),
path('<int:question_id>/vote/', views.vote, name='vote')
]

Então temos uma url criada dentro do aplicativo (polls) e agora precisamos acrescentar ela dentro do nosso site.

E dentro do arquivo urls.py que está dentro da pasta mysite, nós vamos acrescentar mais esse padrão para que possamos acessar tanto o admin que já é padrão quanto o polls que acabamos de criar.

from django.contrib import admin
from django.urls import include, path

urlpatterns = [
path('polls/', include('polls.urls')),
path('admin/', admin.site.urls),
]

Então sempre que criar um aplicativo vamos utilizar o include para inserir ele dentro do nosso site.

Agora nós vamos rodar o manage.py novamente para verificar como está o nosso site. Nesse caso você vai verificar que temos um erro no site.

Isso porque estamos na estrutura antiga, então na url que aparece após terminar o código nós vamos acrescentar /polls.

Abrindo o site
Abrindo o site

Dessa forma nós já conseguimos acessar o aplicativo que criamos e já apareceu a nossa mensagem!

Agora nossa ideia é criar um pequeno banco de dados para que possa guardar os dados da nossa enquete. Esse vai ser o conteúdo do site, vamos fazer uma pergunta e guardar essas respostas nesse banco de dados.

Dentro do arquivo settings.py nós vamos fazer 2 alterações para facilitar a visualização (alterando o idioma e o horário).

LANGUAGE_CODE = 'pt-br'

TIME_ZONE = 'America/Sao_Paulo'

O próximo código que vamos utilizar o terminal é o manage.py migrate para poder migrar as informações para dentro do banco de dados sqlite (que também está dentro da pasta mysite).

Feito isso nós vamos alterar o arquivo models.py para poder indicar como o nosso dado será tratado.

from django.db import models

# Create your models here.

#Questão - texto com 200 caracteres + data da publicação
class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')


#Escolha - Toda alternativa vai estar vinculada a uma pergunta
class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE) #Caso apague a pergunta as escolhas também serão apagas
    choice_text = models.CharField(max_length = 200)
    votes = models.IntegerField(default=0)

Nós vamos voltar ao arquivo de settings para poder instalar o nosso aplicativo polls!

INSTALLED_APPS = [
'polls.apps.PollsConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]

Então vamos adicionar esse código do polls para adicionar o aplicativo. E vamos fazer outra migração, mas agora uma específica, pois já fizemos uma anteriormente.

Fazendo a migração do polls
Fazendo a migração do polls

Vamos fazer a migração para o polls e teremos o nosso modelo question e o modelo choice que acabamos de criar!

Agora nós vamos criar as perguntas e alternativas, e para isso vamos utilizar um ambiente específico chamado shell.

Também vai ser criado dentro do terminal para que possamos fazer nossos testes e depois salvar para gravar no nosso banco de dados.

Novamente vamos utilizar o manage.py, pois é ele o responsável pelas atividades. Então vamos utilizar o manage.py shell para entrar nesse ambiente.

Criando uma questão e salvando
Criando uma questão e salvando

Dentro desse ambiente nós vamos importar as perguntas e escolhas que já temos do nosso arquivo models e vamos importar também o timezone (para utilizar tempo no Python).

Vamos criar uma pergunta e também vamos atribuir a data de publicação a essa pergunta, que é o .now() para pegar a informação de agora.

Aproveitando que estamos falando do arquivo models, vamos até ele acrescentar algumas linhas de código para aparecer a visualização melhor da nossa pergunta e escolha.

#Questão - texto com 200 caracteres + data da publicação
class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')

    def __str__(self):
        return self.question_text

#Escolha - Toda alternativa vai estar vinculada a uma pergunta
class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length = 200)
    votes = models.IntegerField(default=0)

    def __str__(self):
        return self.choice_text

Pois o que já temos na pergunta seria Question: Question object(1) e isso não é nada intuitivo nem interessante de ser mostrado.

Melhor ter dessa forma Question: “Já curtiu esse vídeo?”, por isso esse código, para facilitar essa visualização.

Outra linha de código que podemos adicionar ainda nessa parte é para verificar se a questão foi ou não publicada a mais de 1 dia.

#Questão - texto com 200 caracteres + data da publicação
class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')

    def __str__(self):
        return self.question_text

    def was_published_recently(self):
        return self.pub_date >= timezone.now()-datetime.timedelta(days=1)

Agora vamos voltar ao shell para colocar as nossas opções para a pergunta.

Django no Python
Criando as opções para a pergunta

Agora temos 2 alternativos atreladas a essa pergunta e podemos sair do shell, basta escrever quit().

Vamos passar para a criação do administrador, para isso vamos usar os códigos abaixo.

Django no Python
Criando o administrador

É importante observar que na parte da senha ele vai parecer que não está digitando, mas vai estar sim. Isso é para que sua senha não apareça.

Vamos rodar o servido novamente caso tenha fechado a página e agora nesse site ao invés de colocar /polls nós vamos colocar /admin.

Django no Python
Tela de login

E nessa tela vamos colocar o usuário e senha que acabamos de criar.

Feito isso você vai perceber que temos um ambiente de administrador criado de forma automática.

Django no Python
Tela de administrador

Para não ter somente grupos e usuários, nós podemos adicionar as perguntas também nessa área, para isso basta alterar o arquivo admin.py para que essas informações apareçam.

from django.contrib import admin

# Register your models here.

from .models import Question

admin.site.register(Question)

Com isso basta atualizar o nosso site que teremos atualização e podemos clicar em Questions para verificar as perguntas.

Django no Python
Verificando as questões direto do site

No canto superior da tela você vai perceber que podemos criar uma question logo pelo site ao invés de criar pelo terminal.

Django no Python
Criando uma pergunta através do site

Agora já temos outra pergunta criada de forma bem mais fácil e rápida! Nessa parte você também vai poder fazer alterações nessas perguntas ou até mesmo excluir.

Dentro da parte de views nós podemos adicionar algumas informações a mais para melhorar mais a visualização dos dados dentro do nosso site.

from django.shortcuts import render, get_object_or_404
from django.http import HttpResponse, HttpResponseRedirect
from django.urls import reverse

from .models import Question

# Create your views here.

def index(request):
    latest_question_list = Question.objects.order_by('-pub_date')[:5]
    context = {'latest_question_list': latest_question_list}
    return render(request, 'polls/index.html', context)

def results(request, question_id):
    question = Question(pk=question_id)
    return HttpResponse('Esses são os resultados da pergunta de número %s'%question_id)

def vote( request, question_id):
    question = get_object_or_404(Question, pk=question_id)
    try:
        selected_choice = question.choice_set.get(pk=request.POST['choice'])
    except KeyError:
        return render(request, 'polls/vote.html', {
            'question': question,
            'error_message': "You didn't select a choice.",
        })
    else:
        selected_choice.votes += 1
        selected_choice.save()
        return HttpResponseRedirect(reverse('polls:results', args=(question.id,)))

Aqui já vamos aproveitar para modificar nosso index para criar uma lista das nossas perguntas e ordená-las de acordo com a data de publicação delas.

Estamos ordenando da primeira até a quinta pergunta, por isso do [:5], isso significa que vamos pegar do primeiro até o quinto elemento.

E para retornar nós vamos renderizar uma requisição em uma página em html, resumindo, vamos mostrar essa lista de perguntas de uma forma mais visual.

Esse polls/index.html nós ainda temos que criar, só que ele precisa ser feito no formato do framework, então dentro do polls nós vamos criar uma pasta chama templates.

Dentro dessa outra pasta nós vamos criar outra pasta polls e por fim vamos criar um arquivo em html chamado index.html.

Django no Python
Criando o arquivo index.html

Esse deve ser o resultado após criar as pastas e o arquivo em html para que possamos prosseguir.

Vamos modificar também o result e o vote para que possamos interagir com as opções e com o resultado para que possamos verificar os resultados.

Assim vamos poder interagir colocando as respostas e depois visualizando os resultados, como serão salvos vamos conseguir visualizar esses resultados com a quantidade de votos.

Agora vamos escrever um código em html para mostrar essas informações.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Poll da Hashtag</title>
</head>
<body>
{% if latest_question_list %}
<ul>
{% for question in latest_question_list %}
<li><a href="{% url 'polls:vote' question.id %}">{{ question.question_text }}</a></li>
{% endfor %}
</ul>
{% else %}
<p>No polls are available.</p>
{% endif %}
</body>
</html>

Basicamente vamos verificar se temos alguma informação na lista e se tiver vamos gerar essa lista para que o usuário possa ver todas as questões.

E essa lista já vai ser disponibilizada com um link que vai entrar nessa questão.

Por fim vamos criar mais um arquivo dentro da pasta polls que está dentro de templates, com o nome de results.html.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Resultado da Enquete</title>
</head>
<body>

<h1>{{ question.question_text }}</h1>

<ul>
{% for choice in question.choice_set.all %}
    <li>{{ choice.choice_text }} -- {{ choice.votes }} vote{{ choice.votes|pluralize }}</li>
{% endfor %}
</ul>

<a href="{% url 'polls:vote' question.id %}">Vote again?</a>
<a href="{% url 'polls:index' %}">See other poll?</a>

</body>
</html>

Aqui nós vamos mostrar as opções que podemos votar.

OBS: Nessa parte como é mais voltada para html não vamos entrar muito em detalhes para não deixar o post ainda mais longo.

Vamos agora criar o nosso último arquivo html que é o vote.html para poder finalizar essa parte e conseguir visualizar o nosso resultado.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Vote na enquete</title>
</head>
<body>

<form action="{% url 'polls:vote' question.id %}" method="post">
{% csrf_token %}
<fieldset>
    <legend><h1>{{ question.question_text }}</h1></legend>
    {% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %}
    {% for choice in question.choice_set.all %}
        <input type="radio" name="choice" id="choice{{ forloop.counter }}" value="{{ choice.id }}">
        <label for="choice{{ forloop.counter }}">{{ choice.choice_text }}</label><br>
    {% endfor %}
</fieldset>
<input type="submit" value="Vote">
</form>


</body>
</html>

Aqui vamos fornecer um formulário que vai dar as alternativas possíveis para essa questão então vamos poder escolher essas alternativas.

Feito tudo isso podemos voltar ao nosso site e você vai ver que já temos as perguntas para serem respondidas!

Selecionando uma pergunta no site
Selecionando uma pergunta no site

Aqui clicamos na pergunta “Já curtiu esse vídeo?” e as opções de resposta. E após votar nós vamos poder visualizar a quantidade de votos em cada uma das respostas.

Quantidade de votos em cada opção
Quantidade de votos em cada opção

Conclusão – Django em Python

Nessa aula eu te mostrei uma parte inicial para você sair do zero em Django em Python e criar o seu primeiro site.

Como é uma parte mais pesada e precisa ter um pouco de conhecimento em Python você pode ir repetindo os passos, fazendo algumas alterações para ver como elas vão alterando no seu site.

Assim vai aprendendo e fixando o que cada comando faz e onde eles farão as alterações! Agora é correr pra prática para criar o seu primeiro site.

Hashtag Treinamentos

Para acessar outras publicações de Python, clique aqui!


Quer aprender mais sobre Python com um minicurso básico gratuito?

Quer sair do zero no Power BI e virar uma referência na sua empresa? Inscreva-se agora mesmo no Power BI Impressionador