Aula 22 – Loja Online – Django – Logout do usuário
Aula 22 – Loja Online – Django – Logout do usuário
Voltar para página principal do blog
Todas as aulas desse curso
Aula 21 Aula 23
Se gostarem do conteúdo dêem um joinha 👍 na página do Código Fluente no
Facebook
Esse é o link do código fluente no Pinterest
Meus links de afiliados:
Hostinger
Digital Ocean
One.com
Para baixar o código como está até agora, acesse o link abaixo:
https://github.com/toticavalcanti/django_ecommerce/tree/user_logout
Dicas de livros relacionados:
Logout do usuário
Na aula passada usamos o bootstrap para construir nosso navbar.
Deixamos o login de usuário e o registrar-se funcionando, mas, o logout não.
Então, trataremos do logout, isto é, trataremos do evento quando o usuário tá logado e clica no logout.
Vamos lá!
Na django_ecommerce/src/e_commerce/views.py faça as seguintes mudanças(o que tá em laranja no código abaixo):
django_ecommerce/src/e_commerce/views.py
from django.contrib.auth import authenticate, login, logout, get_user_model
from django.http import HttpResponse
from django.shortcuts import render, redirect
from .forms import ContactForm, LoginForm, RegisterForm
def home_page(request):
context = {
"title": "Home Page",
"content": "Bem vindo a Home Page",
}
if request.user.is_authenticated:
context["premium_content"] = "Você é um usuário Premium"
return render(request, "home_page.html", context)
def about_page(request):
context = {
"title": "Página Sobre",
"content": "Bem vindo a página sobre"
}
return render(request, "about/view.html", context)
def contact_page(request):
contact_form = ContactForm(request.POST or None)
context = {
"title": "Página de Contato",
"content": "Bem vindo a página de contato",
"form": contact_form
}
if contact_form.is_valid():
print(contact_form.cleaned_data)
return render(request, "contact/view.html", context)
def login_page(request):
form = LoginForm(request.POST or None)
context = {
"form": form
}
print("User logged in")
print(request.user.is_authenticated)
if form.is_valid():
print(form.cleaned_data)
username = form.cleaned_data.get("username")
password = form.cleaned_data.get("password")
user = authenticate(request, username=username, password=password)
print(user)
print(request.user.is_authenticated)
if user is not None:
print(request.user.is_authenticated)
login(request, user)
print("Login válido")
print(request.user.is_authenticated)
# Redireciona para uma página de sucesso.
return redirect("/")
else:
#Retorna uma mensagem de erro de 'invalid login'.
print("Login inválido")
return render(request, "auth/login.html", context)
def logout_page(request):
logout(request)
return render(request, "auth/logout.html", {})
User = get_user_model()
def register_page(request):
form = RegisterForm(request.POST or None)
context = {
"form": form
}
if form.is_valid():
print(form.cleaned_data)
username = form.cleaned_data.get("username")
email = form.cleaned_data.get("email")
password = form.cleaned_data.get("password")
new_user = User.objects.create_user(username, email, password)
print(new_user)
return render(request, "auth/register.html", context)
O que fizemos foi:
Importamos o logout do django.contrib.auth e criamos o método logout_page para redirecionar o usuário depois do logout para a página de template do logout, src/templates/auth/logout.html, que iremos criar no código a seguir.
Blz, agora temos a function que vai tratar o logout do usuário.
Agora vamos criar o template:
django_ecommerce/src/templates/auth/logout.html
{% extends "base.html" %}
{% block content %}
<div class='text-center'>
<h2>Você efetuou o logout com sucesso.</h2>
</div>
{% endblock %}
Em django_ecommerce/templates/base/navbar.html faça as alterações que estão em laranja no código abaixo.
django_ecommerce/templates/base/navbar.html
{% url 'home' as home_url %}
{% url 'contact' as contact_url %}
{% url 'products:list' as products_list_url %}
{% url 'login' as login_url %}
{% url 'logout' as logout_url %}
{% url 'register' as register_url %}
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<a class="navbar-brand" href="{{ home_url }}">{% if nome_da_marca %} {{ nome_da_marca }} {% else %} Código Fluente eCommerce {% endif %}</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav mr-auto">
<li class="nav-item {% if request.path == home_url %} active {% endif %}">
<a class="nav-link" href="{{ home_url }}">Home <span class="sr-only">(current)</span></a>
</li>
<li class="nav-item {% if request.path == contact_url %} active {% endif %}">
<a class="nav-link" href="{{ contact_url }}">Contato</a>
</li>
<li class="nav-item {% if request.path == products_list_url %} active {% endif %}">
<a class="nav-link" href="{{ products_list_url }}">Produtos</a>
</li>
{% if request.user.is_authenticated %}
<li class="nav-item {% if request.path == login_url %} active {% endif %}">
<a class="nav-link" href="{{ logout_url }}">Logout</a>
</li>
{% else %}
<li class="nav-item {% if request.path == login_url %} active {% endif %}">
<a class="nav-link" href="{{ login_url }}">Login</a>
</li>
<li class="nav-item {% if request.path == register %} active {% endif %}">
<a class="nav-link" href="{{ register_url }}">Registrar-se</a>
</li>
{% endif %}
</ul>
<form class="form-inline my-2 my-lg-0">
<input class="form-control mr-sm-2" type="search" placeholder="Search" aria-label="Search">
<button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
</form>
</div>
</nav>
Agora falta só colocar a página de logout no django_ecommerce/e_commerce/urls.py.
django_ecommerce/e_commerce/urls.py
from django.conf import settings
from django.conf.urls.static import static
from django.contrib import admin
from django.urls import path, include
from .views import (home_page,
about_page,
contact_page,
login_page,
logout_page,
register_page
)
urlpatterns = [
path('', home_page, name='home'),
path('about/', about_page, name='about'),
path('contact/', contact_page, name='contact'),
path('login/', login_page, name='login'),
path('logout/', logout_page, name='logout'),
path('register/', register_page, name='register'),
path('products/', include("products.urls", namespace="products")),
path('admin/', admin.site.urls),
]
if settings.DEBUG:
urlpatterns = urlpatterns + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
urlpatterns = urlpatterns + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Agora acesse: 127.0.0.1:8000/
Faça o login, depois que tiver logado, no navbar vai aparecer a opção de logout que antes não funcionava, agora, quando você clicar nele, será redirecionado para página de logout feito com sucesso e ao invés de logout, vai aparecer só Login e Registrar-se.
Vamos melhorar o django_ecommerce/src/e_commerce/views.py fazendo as seguintes mudanças(o que tá em laranja no código abaixo):
django_ecommerce/src/e_commerce/views.py
from django.contrib.auth import authenticate, login, logout, get_user_model
from django.http import HttpResponse
from django.shortcuts import render, redirect
from .forms import ContactForm, LoginForm, RegisterForm
def home_page(request):
context = {
"title": "Home Page",
"content": "Bem vindo a Home Page",
}
if request.user.is_authenticated:
context["premium_content"] = "Você é um usuário Premium"
return render(request, "home_page.html", context)
def about_page(request):
context = {
"title": "Página Sobre",
"content": "Bem vindo a página sobre"
}
return render(request, "about/view.html", context)
def contact_page(request):
contact_form = ContactForm(request.POST or None)
context = {
"title": "Página de Contato",
"content": "Bem vindo a página de contato",
"form": contact_form
}
if contact_form.is_valid():
print(contact_form.cleaned_data)
return render(request, "contact/view.html", context)
def login_page(request):
form = LoginForm(request.POST or None)
context = {
"form": form
}
print("User logged in")
print(request.user.is_authenticated)
if form.is_valid():
print(form.cleaned_data)
username = form.cleaned_data.get("username")
password = form.cleaned_data.get("password")
user = authenticate(request, username=username, password=password)
print(user)
print(request.user.is_authenticated)
if user is not None:
print(request.user.is_authenticated)
login(request, user)
print("Login válido")
print(request.user.is_authenticated)
# Redireciona para uma página de sucesso.
return redirect("/")
else:
#Retorna uma mensagem de erro de 'invalid login'.
print("Login inválido")
return render(request, "auth/login.html", context)
def logout_page(request):
context = {
"content": "Você efetuou o logout com sucesso! :)"
}
logout(request)
return render(request, "auth/logout.html", context)
User = get_user_model()
def register_page(request):
form = RegisterForm(request.POST or None)
context = {
"form": form
}
if form.is_valid():
print(form.cleaned_data)
username = form.cleaned_data.get("username")
email = form.cleaned_data.get("email")
password = form.cleaned_data.get("password")
new_user = User.objects.create_user(username, email, password)
print(new_user)
return render(request, "auth/register.html", context)
Agora no django_ecommerce/src/templates/auth/logout.html, transforme o h2 que tava em hard code, e faça ele usar o content do context criado na função logout() do django_ecommerce/src/e_commerce/views.py
django_ecommerce/src/templates/auth/logout.html
{% extends "base.html" %}
{% block content %}
<div class='text-center'>
<h2>{{ content }}</h2>
</div>
{% endblock %}
É isso, nos vemos na próxima aula.
Aula 21 Aula 23
Todas as aulas desse curso
Voltar para página principal do blog
Para baixar o código como está até agora, acesse o link abaixo:
https://github.com/toticavalcanti/django_ecommerce/tree/user_logout
Se gostarem do conteúdo dêem um joinha 👍 na página do Código Fluente no
Facebook
Link do código fluente no Pinterest
Novamente deixo meus link de afiliados:
Hostinger
Digital Ocean
One.com
Obrigado, até a próxima e bons estudos. 😉