Escolar Documentos
Profissional Documentos
Cultura Documentos
Conceitos
Cliente servidor:
Configurações iniciais:
Primeiro devemos criar o ambiente virtual:
# Criar
# Linux
python3 -m venv venv
# Windows
python -m venv venv
#Ativar
# Linux
source venv/bin/activate
# Caso algum comando retorne um erro de permissão execute o código e tente novamente:
path('home/', include('empresa.urls'))
urlpatterns = [
path('nova_empresa/', views.nova_empresa, name="nova_empresa"),
]
def nova_empresa(request):
return HttpResponse('Estou aqui')
os.path.join(BASE_DIR, 'templates')
<!doctype html>
<html lang="pt-BR">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>{% block 'title' %}{% endblock%}</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css" rel="stylesheet">
{% block 'head' %}{% endblock%}
</head>
<body>
</nav>
{% extends "base.html" %}
{% block 'body' %}
<div class="wrapper">
<div class="box">
<div class="header">
<h3 class="titulo">Nova empresa</h3>
</div>
<div class="body-box">
<form action="" method="" enctype="multipart/form-data">
<div class="row">
<div class="col-md">
<label>Nome:</label>
<input type="text" class="form-control" name="nome" placeholder="Digite seu nome...">
</div>
<div class="col-md">
<label>E-mail:</label>
<input type="email" class="form-control" name="email" placeholder="email@gmail.com">
</div>
</div>
<br>
<div class="row">
<div class="col-md">
<label>Cidade:</label>
<input type="text" class="form-control" name="cidade" placeholder="Digite a cidade da empresa...">
</div>
<div class="col-md">
<label>Endereço:</label>
<input type="text" class="form-control" name="endereco" placeholder="Rua...">
</div>
</div>
<br>
<div class="row">
<div class="col-md">
<label>Nicho de mercado:</label>
<select class="form-control" name="nicho">
<option value="M">Marketing</option>
<option value="N">Nutrição</option>
</select>
</div>
</div>
<br>
<div class="row">
<div class="col-md">
<label>Característica da empresa:</label>
<textarea name="caracteristicas" class="form-control"></textarea>
</div>
</div>
<br>
<div class="row">
<div class="col-md">
<label>Logo:</label>
<input type="file" class="form-control" name="logo">
</div>
</div>
<br>
<input type="submit" value="Nova empresa" class="btn btn-lg btn-orange">
</form>
</div>
</div>
</div>
{% endblock%}
Agora é necessário adicionar um CSS para deixar as páginas visualmente mais agradáveis, e para isso precisamos configurar
os arquivos estáticos em settings.py:
STATIC_URL = '/static/'
STATICFILES_DIRS = (os.path.join(BASE_DIR, 'templates/static'),)
STATIC_ROOT = os.path.join('static')
Com os arquivos estáticos configurados podemos criar uma pasta static dentro de templates para adicionar o CSS.
Em base.css adicione:
body{
background-color: #C6C6C6;
.bg-nav{
background-color: #3B0032 !important;
padding: 10px;
}
.wrapper {
margin-top: 3%;
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
}
.box {
padding: 30px;
width: 40vw;
background: #fff;
box-shadow: 4px 4px 10px rgba(0,0,0,.3);
}
.header{
border-bottom: 1px solid black;
}
.titulo{
color: #7D2948;
}
.body-box{
margin-top: 20px;
}
.btn-orange{
background-color: #ED8554;
color: white;
}
.btn-orange:hover{
background-color: #be6136;
color: white;
}
class Tecnologias(models.Model):
tecnologia = models.CharField(max_length=30)
def __str__(self):
return self.tecnologia
class Empresa(models.Model):
choices_nicho_mercado = (
('M', 'Marketing'),
('N', 'Nutrição'),
('D', 'Design')
)
logo = models.ImageField(upload_to="logo_empresa")
nome = models.CharField(max_length=30)
email = models.EmailField()
class Vagas(models.Model):
choices_experiencia = (
('J', 'Júnior'),
('P', 'Pleno'),
('S', 'Sênior')
)
choices_status = (
('I', 'Interesse'),
('C', 'Currículo enviado'),
('E', 'Entrevista'),
('D', 'Desafio técnico'),
('F', 'Finalizado')
)
def __str__(self):
return self.titulo
Execute as migrações:
admin.site.register(Tecnologias)
admin.site.register(Empresa)
admin.site.register(Vagas)
Agora precisamos preencher o campo tecnologias dinamicamente, para isso vamos buscar todas as tecnologias salvas do
banco:
def nova_empresa(request):
techs = Tecnologias.objects.all()
return render(request, 'nova_empresa.html', {'techs': techs})
def nova_empresa(request):
if request.method == "GET":
techs = Tecnologias.objects.all()
return render(request, 'nova_empresa.html', {'techs': techs})
elif request.method == "POST":
nome = request.POST.get('nome')
email = request.POST.get('email')
cidade = request.POST.get('cidade')
endereco = request.POST.get('endereco')
nicho = request.POST.get('nicho')
caracteristicas = request.POST.get('caracteristicas')
tecnologias = request.POST.getlist('tecnologias')
logo = request.FILES.get('logo')
Faça as validações:
MESSAGE_TAGS = {
constants.DEBUG: 'alert-primary',
constants.ERROR: 'alert-danger',
constants.SUCCESS: 'alert-success',
constants.INFO: 'alert-info',
constants.WARNING: 'alert-warning',
}
{% if messages %}
{% for message in messages %}
<section class="alert {{message.tags}}">
{{message}}
</section>
{% endfor %}
{% endif %}
def nova_empresa(request):
if request.method == "GET":
techs = Tecnologias.objects.all()
return render(request, 'nova_empresa.html', {'techs': techs})
elif request.method == "POST":
nome = request.POST.get('nome')
email = request.POST.get('email')
cidade = request.POST.get('cidade')
endereco = request.POST.get('endereco')
nicho = request.POST.get('nicho')
caracteristicas = request.POST.get('caracteristicas')
tecnologias = request.POST.getlist('tecnologias')
logo = request.FILES.get('logo')
empresa = Empresa(logo=logo,
nome=nome,
email=email,
cidade=cidade,
endereco=endereco,
nicho_mercado=nicho,
caracteristica_empresa=caracteristicas)
empresa.save()
empresa.tecnologias.add(*tecnologias)
empresa.save()
messages.add_message(request, constants.SUCCESS, 'Empresa cadastrada com sucesso')
return redirect('/home/empresas')
Listar empresas
Com o cadastro de empresas finalizado agora podemos partir para a listagem.
Vamos começar criando a URL para listagem:
def empresas(request):
empresas = Empresa.objects.all()
tecnologias = Tecnologias.objects.all()
return render(request, 'empresas.html', {'empresas': empresas, 'tecnologias': tecnologias})
{% block 'body' %}
<div class="wrapper">
<div class="box">
<div class="header-box">
{% if messages %}
{% for message in messages %}
<section class="alert {{message.tags}}">
{{message}}
</section>
{% endfor %}
{% endif %}
<h2 class="titulo">Gerenciar empresas</h2>
<a class="btn-nova-empresa">Nova empresa</a>
</div>
<div class="borda-box"></div>
<div class="body-box">
<form>
<div class="row">
<div class="col-md-5">
<input type="text" placeholder="Busque pelo nome" class="form-control" name="nome">
</div>
<div class="col-md-4">
<select class="form-select" name="tecnologias">
<option value="">--------</option>
</select>
</div>
<div class="col-md-3">
<input type="submit" value="FILTRAR" class="btn btn-lg btn-orange">
</div>
</div>
</form>
</table>
</div>
</div>
</div>
{% endblock%}
Crie o empresas.css:
.box {
width: 80vw;
background: #fff;
box-shadow: 4px 4px 10px rgba(0,0,0,.3);
}
.titulo{
display: inline;
}
.btn-nova-empresa{
float: right;
text-decoration: none;
color: white;
background-color: #7D2948;
padding: 10px;
border-radius: 10px;
font-weight: bold;
}
.btn-nova-empresa:hover{
color: white;
text-decoration: none;
background-color: #631f38;
}
.btn-excluir:hover{
color: white;
text-decoration: none;
background-color: #631f38;
}
.header-box{
padding: 30px;
.borda-box{
border-top: 1px solid black;
}
.body-box{
padding: 30px;
}
.btn-orange{
background-color: #ED8554;
color: white;
}
.tabela{
width: 100%;
margin-top: 20px;
}
.tabela-linha{
background-color: #EDE6E6;
}
.btn-excluir{
text-decoration: none;
color: white;
background-color: #7D2948;
padding: 10px;
border-radius: 10px;
{% load static %}
{% block 'head' %}
<link href="{% static 'empresa/css/empresas.css' %}" rel="stylesheet">
{% endblock%}
Por fim, vamos colorir a linha da tabela uma sim e uma não
Adicione na linha:
register = template.Library()
@register.filter(name='is_par')
def is_par(valor):
return True if valor % 2 == 0 else False
'libraries': {
'filtro': 'empresa.templatetags.filtro',
}
Carregue os filtros:
{% load filtros %}
Deletar empresa
Vamos adicionar a funcionalidade para remover empresas.
Comece criando a URL para view excluir_empresa: