Aula 45 - Loja Online - Django - Carrinho - Form
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:
Melhore seu NETWORKING
Participe de comunidades de desenvolvedores:
Fiquem a vontade para me adicionar ao linkedin.
Código final da aula:
Toti:
Backing track / Play-along:
Código Fluente
Putz!
Aula 45 - Loja Online - Django - Carrinho - Form
Vamos modificar a página de detalhes do produto.
O que estamos fazendo é, incluindo o template
update-cart.html que iremos criar em seguida, e passando um
contexto adicional usando o
with e passando o
produto e o
carrinho.
django_ecommerce/products/templates/products/detail.html
{% extends "base.html" %}
{% block content %}
<div class='row'>
<div class='col-12 col-md-6'>
<h1>{{ object.title }}</h1>
{{ object.timestamp|timesince }} ago
{{ object.description|linebreaks }}<br/>
{% if object.image %}
<img src='{{ object.image.url }}' class='img-fluid' />
{% endif %}
</div>
<div class='col-12 col-md-6'>
{% include 'products/snippets/update-cart.html' with product=object cart=cart %}
</div>
</div>
{% endblock %}
Vamos criar o update-cart.html.
Ele é bem parecido com o
django_ecommerce/search/templates/search/snippets/search-form.html.
Só que ao invés do método
GET vamos usar o método
POST.
O
csrf_token é um recurso de segurança que o Django oferece para prevenção de
Cross Site Request Forgery.
django_ecommerce/products/templates/products/snippets/update-cart.html
<form method='POST' action='{% url "cart:update" %}' class="form"> {% csrf_token %}
<input type='hidden' name='product_id' value='{{ product.id }}' />
{% if product in cart.products.all %}
In cart <button type='submit' class='btn btn-link'>Remover?</button>
{% else %}
<button type='submit' class='btn btn-success'>Adicionar</button>
{% endif %}
</form>
Agora abra o
e_commerce/carts/views.py
django_ecommerce/carts/views.py
from django.shortcuts import render, redirect
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", {})
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)
return redirect("cart:home")
Acesse
Agora escolha um produto qualquer e clique em
Detalhe.
Na página de detalhe do produto, clique em adicionar ao carrinho.
Agora entre na parte de administração do site, vá em
cart, veja que foi criado um com os produtos que você adicionou.
Por essa aula é só, nos vemos na próxima. :)
Código final da aula:
Outros canais
Toti:
Backing track / Play-along:
Código Fluente
Putz!
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:
É isso, ficamos por aqui \o/ e até a próxima 😉