Skip to content

Commit

Permalink
Merge pull request #18 from Brwnds/duda
Browse files Browse the repository at this point in the history
Arrumando funcionalidades do Icone/página do perfil de Usuário
  • Loading branch information
dudaa28 authored Sep 14, 2024
2 parents 1c8b2f3 + 952b922 commit 67e914d
Show file tree
Hide file tree
Showing 5 changed files with 115 additions and 37 deletions.
2 changes: 2 additions & 0 deletions app/app/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,4 +32,6 @@
path('obter_carrinho/', views.obter_carrinho, name='obter_carrinho'),
path('finalizar_compra/', views.finalizar_compra, name='finalizar_compra'),
path('logout/', views.logout, name='logout'),
path('editar_perfil/', views.editar_perfil, name='editar_perfil'),
path('deletar_perfil/', views.deletar_perfil, name='deletar_perfil'),
]
84 changes: 50 additions & 34 deletions app/loja/templates/admin.html
Original file line number Diff line number Diff line change
Expand Up @@ -26,90 +26,105 @@ <h1>Perfil do Usuário</h1>
<button class="form--submit" onclick="goToCatalog()">Voltar para o Catálogo</button>
</div>

<!-- Modal para editar o perfil -->
<!-- Modal para editar o perfil -->
<div id="editModal" class="modal">
<div class="modal-content">
<h2>Editar Perfil</h2>
<label for="username">Nome de Usuário (Atual):</label>
<input type="text" id="username" class="form--input" value="{{ user.username }}" disabled>

<label for="name">Novo nome:</label>
<input type="text" id="name" class="form--input" placeholder="Digite novo nome de usuário">

<label for="currentPassword">Senha Atual:</label>
<input type="text" id="currentPassword" class="form--input" value="********" disabled>

<label for="newPassword">Nova Senha:</label>
<input type="password" id="newPassword" class="form--input" placeholder="Digite nova senha">

<div>
<input type="checkbox" id="showNewPassword" onclick="toggleNewPasswordVisibility()">
<label for="showNewPassword">Mostrar Senha</label>
</div>

<button class="form--submit" onclick="saveProfile()">Salvar</button>
<button class="form--submit" onclick="closeModal()">Cancelar</button>
<form id="editForm" method="post" action="{% url 'editar_perfil' %}">
{% csrf_token %}
<label for="username">Nome de Usuário (Atual):</label>
<input type="text" id="username" name="username" class="form--input" value="{{ user.username }}" disabled>

<label for="name">Novo nome:</label>
<input type="text" id="name" name="name" class="form--input" placeholder="Digite novo nome de usuário">

<label for="currentPassword">Senha Atual:</label>
<input type="text" id="currentPassword" class="form--input" value="********" disabled>

<label for="newPassword">Nova Senha:</label>
<input type="password" id="newPassword" name="newPassword" class="form--input" placeholder="Digite nova senha">

<div>
<input type="checkbox" id="showNewPassword" onclick="toggleNewPasswordVisibility()">
<label for="showNewPassword">Mostrar Senha</label>
</div>

<button type="submit" class="form--submit">Salvar</button>
<button type="button" class="form--submit" onclick="closeModal()">Cancelar</button>
</form>
</div>
</div>

</div>
<script>
let currentPasswordValue = '********'; // Valor inicial da senha atual

// Função para abrir o modal de edição
function editProfile() {
// Preenche os campos com os valores atuais
document.getElementById('username').value = document.getElementById('userName').textContent;
document.getElementById('name').value = '';
document.getElementById('currentPassword').value = currentPasswordValue; // Exibe a senha atual
document.getElementById('newPassword').value = '';

// Abre o modal
document.getElementById('editModal').style.display = 'flex';
}

// Função para fechar o modal
function closeModal() {
document.getElementById('editModal').style.display = 'none';
}

// Função para salvar os dados editados
function saveProfile() {
// Pega os novos valores dos inputs
let username = document.getElementById('username').value;
let name = document.getElementById('name').value;
let newPassword = document.getElementById('newPassword').value;

// Atualiza o nome apenas se o campo de novo nome não estiver vazio
if (name) {
document.getElementById('userName').textContent = name;
}

// Atualiza a senha apenas se a nova senha não estiver vazia
if (newPassword) {
document.getElementById('userPassword').textContent = "********"; // Não mostra a nova senha por segurança
currentPasswordValue = newPassword; // Atualiza a senha atual
document.getElementById('currentPassword').value = currentPasswordValue; // Exibe a senha atual
}

// Fecha o modal
closeModal();
}

// Função para deletar o perfil e redirecionar para a página de cadastro
function deleteProfile() {
if (confirm("Você tem certeza que deseja deletar seu perfil?")) {
// Aqui você pode adicionar a lógica para excluir o perfil do backend

// Redireciona para a página de cadastro existente
window.location.href = "{% url 'cadastro' %}"; // Substitua pelo caminho da sua página de cadastro
// Cria um formulário temporário para enviar a requisição de exclusão
let form = document.createElement('form');
form.method = 'POST';
form.action = "{% url 'deletar_perfil' %}";

// Adiciona o token CSRF
let csrfToken = document.createElement('input');
csrfToken.type = 'hidden';
csrfToken.name = 'csrfmiddlewaretoken';
csrfToken.value = '{{ csrf_token }}';
form.appendChild(csrfToken);

document.body.appendChild(form);
form.submit();
}
}

// Função para voltar para o catálogo
function goToCatalog() {
window.location.href = "{% url 'catalogo' %}"; // Substitua pelo caminho da sua página de catálogo
}

// Função para mostrar ou esconder a nova senha
function toggleNewPasswordVisibility() {
const newPasswordInput = document.getElementById('newPassword');
Expand All @@ -120,5 +135,6 @@ <h2>Editar Perfil</h2>
newPasswordInput.type = 'password';
}
}
</script>
</script>

{% endblock %}
9 changes: 6 additions & 3 deletions app/loja/templates/login.html
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Projetinho duda</title>
<link rel="stylesheet" href="{% static 'css/login.css' %}">
<link rel="stylesheet" type="text/css" href="{% static 'css/styles.css' %}">
</head>
<body>

Expand All @@ -14,11 +15,13 @@
{% if messages %}
<ul class="messages">
{% for message in messages %}
<li>{{ message }}</li>
<li class="{{ message.tags }}">{{ message }}</li>
{% endfor %}
</ul>
{% endif %}

{% endif %}

<!-- O restante do formulário de login -->

{% csrf_token %}
<h1>Entrar</h1>
<label for="username">Usuário</label>
Expand Down
45 changes: 45 additions & 0 deletions app/loja/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@
from django.http import JsonResponse
from django.views.decorators.http import require_POST
from .models import Bolo, Profile
from django.contrib.auth.forms import UserChangeForm
from django.contrib.auth import update_session_auth_hash
from django.contrib.auth.forms import PasswordChangeForm
from django.contrib.auth import get_user_model
import json


Expand Down Expand Up @@ -98,3 +102,44 @@ def finalizar_compra(request):
profile.limpar_carrinho() # Limpa o carrinho
return JsonResponse({'success': True})

@login_required
def editar_perfil(request):
if request.method == 'POST':
user = request.user
novo_nome = request.POST.get('name')
nova_senha = request.POST.get('newPassword')

# Atualiza o nome do usuário
if novo_nome:
user.username = novo_nome

# Atualiza a senha do usuário
if nova_senha:
user.set_password(nova_senha)

# Salva as mudanças no usuário
user.save()

# Desloga o usuário para que ele precise logar novamente com os novos dados
logout(request)

# Adiciona uma mensagem de sucesso
messages.success(request, 'Seu perfil foi atualizado com sucesso. Por favor, faça login com suas novas credenciais.')

# Redireciona para a página de login
return redirect('login')

# Caso seja GET, renderiza a página de edição de perfil
return render(request, 'editar_perfil.html')

@login_required
def deletar_perfil(request):
if request.method == 'POST':
user = request.user
user.delete() # Remove o usuário e todas as suas associações

messages.success(request, 'Perfil excluído com sucesso!')
return redirect('cadastro') # Redireciona para a página de cadastro ou login

return redirect('adm') # Redireciona para a página de administração se a requisição não for POST

12 changes: 12 additions & 0 deletions app/static/css/styles.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
/* static/css/styles.css */
.message {
padding: 10px;
margin: 20px 0;
border: 1px solid #ccc;
border-radius: 4px;
background-color: #f0f0f0; /* Fundo neutro */
color: #000; /* Texto preto */
font-size: 16px;
font-family: Arial, sans-serif;
display: inline-block; /* Para ajustar o tamanho da caixa à mensagem */
}

0 comments on commit 67e914d

Please sign in to comment.