Aula 45 – Loja Online – Django – Carrinho – Form
Aula 45 – Loja Online – Django – Carrinho – Form
Voltar para página principal do blog
Todas as aulas desse curso
Aula 44 Aula 46
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
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 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
http://localhost:8000/products/
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.