Aula 22 – Loja Online – Django – Logout do usuário

Aula 22 – Loja Online – Django – Logout do usuário

Loja Online - Django - Logout do usuário

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&oacute;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. 😉

 

About The Author
-

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>