Aula 52 – Loja Online – Django – Checkout View

Aula 52 – Loja Online – Django – Checkout View

Checkout View

Checkout View

Voltar para página principal do blog

Todas as aulas desse curso

Aula 51               Aula 53

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

Melhore seu NETWORKING

https://digitalinnovation.one/

Participe de comunidades de desenvolvedores:

Fiquem a vontade para me adicionar ao linkedin.

E também para me seguir no https://github.com/toticavalcanti.

Código final da aula:

https://github.com/toticavalcanti

Toti:

https://www.youtube.com/channel/UCUEtjLuDpcOvR3mIUr-viOA

Backing track / Play-along:

https://www.youtube.com/channel/UCT3TryVMqTqYBjf5g5WAHfA

Código Fluente

https://www.youtube.com/channel/UCgn-O-88XBAwdG9gUWkkb0w

Putz!

https://www.youtube.com/channel/UCZXop2-CECwyFYmHbhnAkAw

Aula 52 – Loja Online – Django – Checkout View

Apesar do Checkout ter haver com o Order, no nosso projeto, vai fazer mais sentido colocar o Checkout View no Cart.

No Cart temos o Cart Home, Cart Update e agora vamos ter o Checkout home.

E importar o modelo Order no Cart, porque vamos usar ele dentro da views do Cart.

Vamos abrir então o views.py do Cart e definir o método de checkout_home().

e_commerce/carts/views.py


from django.shortcuts import render, redirect
from orders.models import Order
from products.models import Product
from .models import Cart

def cart_home(request):
    cart_obj, new_obj  = Cart.objects.new_or_get(request)
    return render(request, "carts/home.html", {"cart": cart_obj})

def cart_update(request):
    print(request.POST)
    product_id = request.POST.get('product_id')
    if product_id is not None:
        try:
            product_obj = Product.objects.get(id = product_id)
        except Product.DoesNotExist:
            print("Mostrar mensagem ao usuário, esse produto acabou!")
            return redirect("cart:home")
        cart_obj, new_obj = Cart.objects.new_or_get(request) 
        if product_obj in cart_obj.products.all(): 
            cart_obj.products.remove(product_obj) 
        else: 
            cart_obj.products.add(product_obj)
        request.session['cart_items'] = cart_obj.products.count()
    return redirect("cart:home")
def checkout_home(request):
    #aqui a gente pega o carrinho
    cart_obj, cart_created= Cart.objects.new_or_get(request)
    order_obj = None
    #se o carrinho acabou de ser criado, ele tá zerado
    #ou se o carrinho já existir mas não tiver nada dentro
    if cart_created or cart_obj.products.count() == 0:
        return redirect("cart:home")

    #aqui a order associada ao carrinho
    else:
        order_obj, new_order_obj = Order.objects.get_or_create(cart = cart_obj)
    return render(request, "carts/checkout.html", {"object": order_obj})

Agora no e_commerce/carts/urls.py vamos importar o método checkout_home() que acabamos de criar acima e a rota checkout.

e_commerce/carts/urls.py


from django.urls import path

app_name = "carts"

from .views import (
                        cart_home,
                        checkout_home, 
                        cart_update,
                        
                    )

urlpatterns = [
    path('', cart_home, name='home'),
    path('checkout/', checkout_home, name='checkout'),
    path('update/', cart_update, name='update')
]

Agora crie o html da view do checkout.

e_commerce/carts/templates/carts/checkout.html



{% extends "base.html" %}
{% block content %}
  <h1>Checkout</h1>
  <p>Total do carrinho: {{ object.cart.total }}</p>
  <p>Frete: {{ object.shipping_total }}</p>
  <p>total: {{ object.total }}</p>
{% endblock %}

E no home do Cart vamos colocar um botão de checkout.

e_commerce/carts/templates/carts/home.html



{% extends "base.html" %}
{% block content %}
  <h1>Cart</h1>
  {% if cart.products.exists %}
  <table class="table">
    <thead>
      <tr>
        <th>#</th>
        <th>Nome</th>
        <th>Preço/th>
      </tr>
    </thead>
    <tbody>
      {% for product in cart.products.all %}
      <tr>
        <th scope="row">{{ forloop.counter }}</th>
        <td>
          <a href='{{ product.get_absolute_url }}'>{{ product.title }}</a>
          {% include 'products/snippets/update-cart.html' with product=product cart=cart in_cart=True %}
        </td>
        <td>{{ product.price }}</td>
      </tr>
      {% endfor %}
      <tr>
        <td colspan="2"></td>
        <td><b>Subtotal</b> {{ cart.subtotal }}</td>
      </tr>
      <tr>
        <td colspan="2"></td>
        <td><b>Total</b> {{ cart.total }}</td>
      </tr>
      <tr>
        <td colspan="2"></td>
        <td><a class='btn btn-lg btn-success' href='{% url "cart:checkout" %}'>Conferir compra</a></td>
      </tr>
    </tbody>
  </table>
  {% else %}
    <p class='lead'>Carrinho vazio</p>
  {% endif %}
{% endblock %}

Agora acesse http://127.0.0.1:8000/admin

Na próxima a gente vai ver o módulo math com decimais e floats.

Por essa aula é só, nos vemos na próxima.

Voltar para página principal do blog

Todas as aulas desse curso

Aula 51               Aula 53

Código final da aula:

https://github.com/toticavalcanti

Outros canais

Toti:

https://www.youtube.com/channel/UCUEtjLuDpcOvR3mIUr-viOA

Backing track / Play-along:

https://www.youtube.com/channel/UCT3TryVMqTqYBjf5g5WAHfA

Código Fluente

https://www.youtube.com/channel/UCgn-O-88XBAwdG9gUWkkb0w

Putz!

https://www.youtube.com/channel/UCZXop2-CECwyFYmHbhnAkAw

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

Nos vemos na próxima então, \o/  😉 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>