From 8ba68a809c41d46bf3944ccf32d300687f4cd319 Mon Sep 17 00:00:00 2001 From: Ferney F Roa H Date: Wed, 22 Sep 2021 15:52:15 -0500 Subject: [PATCH 1/2] Fixes #13 Este es un avance sin pruebas, dado que se han hecho en Shell --- Checkout_79495131/__init__.py | 0 .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 202 bytes .../__pycache__/admin.cpython-39.pyc | Bin 0 -> 378 bytes .../__pycache__/apps.cpython-39.pyc | Bin 0 -> 500 bytes .../__pycache__/models.cpython-39.pyc | Bin 0 -> 2206 bytes .../__pycache__/serializers.cpython-39.pyc | Bin 0 -> 1355 bytes .../__pycache__/urls.cpython-39.pyc | Bin 0 -> 526 bytes .../__pycache__/views.cpython-39.pyc | Bin 0 -> 3514 bytes Checkout_79495131/admin.py | 7 ++ Checkout_79495131/apps.py | 6 + Checkout_79495131/migrations/0001_initial.py | 49 ++++++++ .../0002_alter_carritocompra_fecha.py | 18 +++ Checkout_79495131/migrations/__init__.py | 0 .../__pycache__/0001_initial.cpython-39.pyc | Bin 0 -> 1505 bytes ...2_alter_carritocompra_fecha.cpython-39.pyc | Bin 0 -> 666 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 213 bytes Checkout_79495131/models.py | 43 +++++++ Checkout_79495131/serializers.py | 23 ++++ Checkout_79495131/tests.py | 3 + Checkout_79495131/urls.py | 17 +++ Checkout_79495131/views.py | 116 ++++++++++++++++++ .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 196 bytes .../__pycache__/settings.cpython-39.pyc | Bin 0 -> 2533 bytes ExEcommerce/__pycache__/urls.cpython-39.pyc | Bin 0 -> 446 bytes ExEcommerce/__pycache__/wsgi.cpython-39.pyc | Bin 0 -> 607 bytes ExEcommerce/settings.py | 3 +- ExEcommerce/urls.py | 3 +- Productos/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 194 bytes Productos/__pycache__/admin.cpython-39.pyc | Bin 0 -> 370 bytes Productos/__pycache__/apps.cpython-39.pyc | Bin 0 -> 420 bytes Productos/__pycache__/models.cpython-39.pyc | Bin 0 -> 2194 bytes .../__pycache__/serializers.cpython-39.pyc | Bin 0 -> 1320 bytes Productos/__pycache__/urls.cpython-39.pyc | Bin 0 -> 561 bytes Productos/__pycache__/views.cpython-39.pyc | Bin 0 -> 1531 bytes Productos/migrations/0001_initial.py | 8 +- .../migrations/0002_auto_20210916_1521.py | 23 ---- .../__pycache__/0001_initial.cpython-39.pyc | Bin 0 -> 1451 bytes .../0002_auto_20210916_1521.cpython-39.pyc | Bin 0 -> 691 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 205 bytes Productos/models.py | 2 +- db.sqlite3 | Bin 155648 -> 196608 bytes 41 files changed, 292 insertions(+), 29 deletions(-) create mode 100644 Checkout_79495131/__init__.py create mode 100644 Checkout_79495131/__pycache__/__init__.cpython-39.pyc create mode 100644 Checkout_79495131/__pycache__/admin.cpython-39.pyc create mode 100644 Checkout_79495131/__pycache__/apps.cpython-39.pyc create mode 100644 Checkout_79495131/__pycache__/models.cpython-39.pyc create mode 100644 Checkout_79495131/__pycache__/serializers.cpython-39.pyc create mode 100644 Checkout_79495131/__pycache__/urls.cpython-39.pyc create mode 100644 Checkout_79495131/__pycache__/views.cpython-39.pyc create mode 100644 Checkout_79495131/admin.py create mode 100644 Checkout_79495131/apps.py create mode 100644 Checkout_79495131/migrations/0001_initial.py create mode 100644 Checkout_79495131/migrations/0002_alter_carritocompra_fecha.py create mode 100644 Checkout_79495131/migrations/__init__.py create mode 100644 Checkout_79495131/migrations/__pycache__/0001_initial.cpython-39.pyc create mode 100644 Checkout_79495131/migrations/__pycache__/0002_alter_carritocompra_fecha.cpython-39.pyc create mode 100644 Checkout_79495131/migrations/__pycache__/__init__.cpython-39.pyc create mode 100644 Checkout_79495131/models.py create mode 100644 Checkout_79495131/serializers.py create mode 100644 Checkout_79495131/tests.py create mode 100644 Checkout_79495131/urls.py create mode 100644 Checkout_79495131/views.py create mode 100644 ExEcommerce/__pycache__/__init__.cpython-39.pyc create mode 100644 ExEcommerce/__pycache__/settings.cpython-39.pyc create mode 100644 ExEcommerce/__pycache__/urls.cpython-39.pyc create mode 100644 ExEcommerce/__pycache__/wsgi.cpython-39.pyc create mode 100644 Productos/__pycache__/__init__.cpython-39.pyc create mode 100644 Productos/__pycache__/admin.cpython-39.pyc create mode 100644 Productos/__pycache__/apps.cpython-39.pyc create mode 100644 Productos/__pycache__/models.cpython-39.pyc create mode 100644 Productos/__pycache__/serializers.cpython-39.pyc create mode 100644 Productos/__pycache__/urls.cpython-39.pyc create mode 100644 Productos/__pycache__/views.cpython-39.pyc delete mode 100644 Productos/migrations/0002_auto_20210916_1521.py create mode 100644 Productos/migrations/__pycache__/0001_initial.cpython-39.pyc create mode 100644 Productos/migrations/__pycache__/0002_auto_20210916_1521.cpython-39.pyc create mode 100644 Productos/migrations/__pycache__/__init__.cpython-39.pyc diff --git a/Checkout_79495131/__init__.py b/Checkout_79495131/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Checkout_79495131/__pycache__/__init__.cpython-39.pyc b/Checkout_79495131/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..31412a7ab198f6f718cbee33e8d02e24e382dfe4 GIT binary patch literal 202 zcmYe~<>g`kf|A!Bi6Hthh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o10hKeRZts8~NO zwJ0yOGOZ{-F+<-aKe;qFHLs*t-#4>3Ge0jRGug<%$VlHgGdU;USl=bJEI2={q&%@G zHQ2~hKiEXywZb(yKQ}kEC^TZlX-=vg$RVGBm;nH0u{1vb literal 0 HcmV?d00001 diff --git a/Checkout_79495131/__pycache__/admin.cpython-39.pyc b/Checkout_79495131/__pycache__/admin.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a54c437e622b980c158266e5714de9577ac71384 GIT binary patch literal 378 zcmZ9Hu}%U(5QcXT(8GYWuYd(B2gHyNqd7>lz~-=_G3(wOEbi@)-93=E(UMoX*2)*K zuyP?5#7X9#Zzhw;KfKvIBR(eI_k8E;=e{|Pif?Xx+M$<}q*Rfd&M4h;pn@p@x~#lc zq4wcte|&Ppr+ZE-329Zo`~}jYWsRq~)E?;NV=J7Ur%SHq*cParkuN6jTeFLJ0pb-4 z_k2C*4f>sKr=4R8%9d3t9h9MgxwH;U*^Id{(qWAG%J8!OpfeonwZt;KGfs*^;f|QP zKYEZK#hxq}%Q7$;wwXb`U?UVo4%%5ZkyfIfN)cT}5sRfz*kvPFCz!bnH;_bqmh{;8 nZ7eX)!3dc8wf|n(;luW7TZTh#yHIdLy#X6~X#`==pbh#9_W)=J literal 0 HcmV?d00001 diff --git a/Checkout_79495131/__pycache__/apps.cpython-39.pyc b/Checkout_79495131/__pycache__/apps.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..da38cc21c3a7045aaef59778e0cb6301d6a07346 GIT binary patch literal 500 zcmYjNy-ve05Vqq~D*YKihz*G~OH9*Ns1iagZGnX@DN7d1#7-NU#34?Avcjt{@Jd;k z5O2VQ-4^Ic_xXOlJKr5`Hfumh{&hv))cc{GZ84S8S1OMbFu-60V(38#E&($bdIbz| z_<}rxnJ%y@pNa)6SndqcbSRP_ocTJkEl@dqrE*^Z2OeZVRYMOk!!sFDUCi=eIOqOC z6!}T7)9bd{t#z;GLv}}#nXuWd9Sg=IX`hF)L6M7#kVmZC{VgNEbrY*nRtZUH%n2!L zgs8G2(sqN8`+`QB%pT(bEux%I)rXyNBY7rqz_WxegG|sl9tppQ zd6G+f9m-H7)6jR09S09XKN4*`;t#F}@<*C+*Xd%ngU3%}U&Jxbd_GmQ&7yx3W16PY wPL~-{-|Fj24OM8uRb*nJvc9>3W@d(-PILd~Tw8S&E32pLh0pZWrRFx!4;%7-(f|Me literal 0 HcmV?d00001 diff --git a/Checkout_79495131/__pycache__/models.cpython-39.pyc b/Checkout_79495131/__pycache__/models.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..103aa7f2040d16936ecf96a3ce48e807c61cd168 GIT binary patch literal 2206 zcmah~&2HO95aypKQkG;{cAEa8MbRIqMXbb05CkY%r?Oq7jRm7pF1!$H?#iZ1a@8T3 z#6@rMHE+;Ed-R+18TQ(fUm>T?EG1Qr9hAb3W@mP}!}-3MWvy1jz~{ktKeB_GVf;gr z<;TIvHjeyf6x`ruVx(qZnxtEamD+)A8b27^=FXYH9bun1FYTa)mKt}_;?68CTI$?G zi#M~>xj!;`jSGCQ(KD5I0FswcAyIcz$wiV!GVAV9Qg){-;EPY?@gmHQL|p6HZsnw;cN3&&sOy^FB!yA*?9q~HWAS=!{eP?B$IOk zy14&!+JBl0$omrknK+$*WXJs-8I`HXioCxc=dsMjakO=NYpXwqqeR~A?}%q3IVqkq z5TmX8{n5St?u*?>rm28PjB(kqh<=e}5k7c$@8SJBcklEoWHzU#svd?IOBk-u2UsW! z^S2w9lC(Knfq}XpiW0Ib8K5la3=q#aeX%*zUjrR9R2qF8tfNr1LKZA(qdGru{qlj@ z|Nn=;&Be>FJI2k*^br(mOXqA{KBrnR?5!&=3^SIBFjS2&#N?C->CG_wwPZ=<0fJfi zgJTAJu}C($RLRL#j_&(_GS9OM08TypHv`$~~+>U-^%-iQLVe z#S$sy%Phn$AqsJEfDwXA0$Z4Iv4!Fa35cPZY1Hqi*8VjALcVD#^ek16s`AzuypDX@ z@iFe5Q*Uh%%$(=LUI*UC74QLx4@qd~8+#H&e3bnpPIXRIeeh^Bc(k(%JzDb-3gu=p zJp>VWY$}o@<}&bk3?hoKXai@;;yh?_F=bF7+pU(=qQOAI%4!3I%<{FC<#Vtl|X%{XIClJ zW#CO`H_BV#{1Ug!;q1&~o1+Og(0e781&yc+Q7kyj6Ki8ZC0lt^r7>aC$2H2GB8;)T zE(qo2<)Q9bUoAzlwuofzeG9RGc46&+Dg Z@4xOq<$Y82&2Q;4$UPLq&~CTe{1;H9(y;&l literal 0 HcmV?d00001 diff --git a/Checkout_79495131/__pycache__/serializers.cpython-39.pyc b/Checkout_79495131/__pycache__/serializers.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a709c799cad2772e32523a4c9abbd7e8ed424bee GIT binary patch literal 1355 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 C54Jx5 literal 0 HcmV?d00001 diff --git a/Checkout_79495131/migrations/__pycache__/__init__.cpython-39.pyc b/Checkout_79495131/migrations/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..597bbf4938a65491af2340fac12da7574a43b043 GIT binary patch literal 213 zcmYe~<>g`kf|A!Bi6Hthh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o5j%KeRZts8~NO zwJ0yOGOZ{-F+<-aKe;qFHLs*t-#4>3Ge0jRGug<%$VlHgGdU;USl=bJEI2={q&%@G zHQ2~hKiEXywZb(yKQ}kEC^&ryk0@&Ee@O9{FKt1R6CHHJ_9iW0Oy7{wg3PC literal 0 HcmV?d00001 diff --git a/Checkout_79495131/models.py b/Checkout_79495131/models.py new file mode 100644 index 0000000..7b77a91 --- /dev/null +++ b/Checkout_79495131/models.py @@ -0,0 +1,43 @@ +from Productos.models import Producto +from django.db import models + +class CarritoCompra(models.Model): + usuario = models.CharField(max_length=200) + fecha = models.DateTimeField(auto_now_add=True) + dcto = models.FloatField(default=0) + cantMinima = models.IntegerField(default=0) + pagado = models.BooleanField(default=False) + + def __str__(self): + return self.usuario + '-' + str(self.fecha) + + def total(self) -> float: + pass + + def numArt(self) -> int: + pass + + + +class InfoEnvio(models.Model): + carrito = models.ForeignKey(CarritoCompra, on_delete=models.CASCADE) + nombre = models.CharField(max_length=80) + apellido = models.CharField(max_length=80) + direccion = models.CharField(max_length=200) + pais = models.CharField(max_length=50) + departamento = models.CharField(max_length=50) + ciudad = models.CharField(max_length=50) + + def __str__(self): + return self.carrito.__str__() + +class Articulo(models.Model): + carrito = models.ForeignKey(CarritoCompra, on_delete=models.CASCADE) + producto = models.ForeignKey(Producto, on_delete=models.SET_NULL, null=True) + cantidad = models.IntegerField(default=0) + + def __str__(self): + return self.carrito.__str__() + '-' + self.producto.__str__() + + def subtotal(self) -> float: + return self.cantidad * self.producto.precio \ No newline at end of file diff --git a/Checkout_79495131/serializers.py b/Checkout_79495131/serializers.py new file mode 100644 index 0000000..8bfe0b0 --- /dev/null +++ b/Checkout_79495131/serializers.py @@ -0,0 +1,23 @@ +from rest_framework import serializers + +from .models import CarritoCompra, InfoEnvio, Articulo + +from Checkout_79495131.models import CarritoCompra + + +class CarritoSerial(serializers.ModelSerializer): + class Meta: + model = CarritoCompra + fields = '__all__' + + +class InfoEnvioSerial(serializers.ModelSerializer): + class Meta: + model = InfoEnvio + fields = '__all__' + + +class ArticuloSerial(serializers.ModelSerializer): + class Meta: + model = Articulo + fields = '__all__' diff --git a/Checkout_79495131/tests.py b/Checkout_79495131/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/Checkout_79495131/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/Checkout_79495131/urls.py b/Checkout_79495131/urls.py new file mode 100644 index 0000000..5a2346c --- /dev/null +++ b/Checkout_79495131/urls.py @@ -0,0 +1,17 @@ +# Contiene las dir locales de la app Checkout +from django.urls import path, include +from rest_framework.routers import DefaultRouter + +# ViewSet => especifi las rutas med 'routes' + +from .views import CarritoAPI, InfoEnvioAPI + +router = DefaultRouter() + +router.register('carrito', CarritoAPI, basename='carrito') +router.register('infoenvio', InfoEnvioAPI, basename='infoenvio') + +urlpatterns = [ + # lsita de dir locales + path('crud/', include(router.urls)) +] \ No newline at end of file diff --git a/Checkout_79495131/views.py b/Checkout_79495131/views.py new file mode 100644 index 0000000..28fb165 --- /dev/null +++ b/Checkout_79495131/views.py @@ -0,0 +1,116 @@ +from functools import partial +import re +from rest_framework import viewsets +from rest_framework.response import Response +from rest_framework.status import HTTP_400_BAD_REQUEST +from django.shortcuts import * + +from .serializers import CarritoSerial, InfoEnvioSerial +from .models import CarritoCompra, InfoEnvio + + +class CarritoAPI(viewsets.ViewSet): + def list(self, request): + # listar infromación + # request => peticion de user. GET, POST, PUT, ... + carritos = CarritoCompra.objects.all() # obj tipo CarritoCompra + serializador = CarritoSerial(carritos, many=True) + return Response(serializador.data) + + def create(self, request) : + # crear obj en DB + # nuevoCarrito = CarritoCompra.objects.create(usuario=request.data) + serializador = CarritoCompra(data=request.data) + if serializador.is_valid(): + carrito = serializador.save() + return Response({'idCarrito':carrito.id}) + return Response(serializador.errors, HTTP_400_BAD_REQUEST) + + + def retrieve(self, request, pk=None): + # obtetner un solo reg en DB + #pk = primary key + carrito = get_object_or_404(CarritoCompra, id=pk) + seriarizador = CarritoSerial(carrito) + return Response(seriarizador.data) + + + def partial_update(self, request, pk=None): + # actualizar parcial => PATCH + carrito = get_object_or_404(CarritoCompra, pk=pk) + carrito_s = CarritoSerial(carrito, request.data, partial=True) + if carrito_s.is_valid(): + carrito_s.save() + return Response('Actualizado') + return Response(carrito_s.errors) + + + # No recomendado para carrito de compra -- No queremos cambiar user + def update(self, request, pk=None): + # actualizar parcial => PUT + carrito = get_object_or_404(CarritoCompra, pk=pk) + carrito_s = CarritoSerial(carrito, request.data, partial=False) + if carrito_s.is_valid(): + carrito_s.save() + return Response({'Actualizado':True}) + return Response(carrito_s.errors) + + + def destroy(self, request, pk=None): + # borramos elementos en DB + carrito = CarritoCompra.objects.get(pk) + carrito.delete() + return Response({'Objeto borrado':True}) + + +# def retrive(self, request, pk=None): +# return Response(pk) + + + + + +class InfoEnvioAPI(viewsets.ViewSet): + def list(self, request): + info_envio = InfoEnvio.objects.all() + serializer = InfoEnvioSerial(info_envio, many=True) + return Response(serializer.data) + + + def create(self, request): + serializer = InfoEnvio(data=request.data) + if serializer.is_valid(): + info_e = serializer.save() + return Response({'Envio Creado': True, 'infoId':info_e.id}) + return Response(serializer.errors, HTTP_400_BAD_REQUEST) + + + def retrieve(self, request, pk=None): + info_envio = get_object_or_404(InfoEnvio, id=pk) + seriarizer = InfoEnvioSerial(info_envio) + return Response(seriarizer.data) + + + def partial_update(self, request, pk=None): + # actualizar parcial => PATCH + info_envio = get_object_or_404(InfoEnvio, pk=pk) + info_envio_s = InfoEnvioSerial(info_envio, request.data, partial=True) + if info_envio_s.is_valid(): + info_envio_s.save() + return Response({'Info Envio Actualizado':True}) + return Response(info_envio_s.errors) + + + def destroy(self, request, pk=None): + # borramos elementos en DB + info_envio = InfoEnvio.objects.get(pk) + info_envio.delete() + return Response({'Info envio Borrado':True}) + + + +''' +class CarritoAPI(viewsets.ModelViewSet): + serializer_class = CarritoSerial + queryset = CarritoCompra.objects.all() +''' \ No newline at end of file diff --git a/ExEcommerce/__pycache__/__init__.cpython-39.pyc b/ExEcommerce/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a03d4386ba5c99aa60359cc9a7c6dcf2d72dc60a GIT binary patch literal 196 zcmYe~<>g`k0-lE+i6Hthh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o10VKeRZts8~NO zwJ0yOGOZ{-F+<-aKe;qFHLs*t-#4>3Ge0jRGug<%$VlHgGdU;USl=bJEI2={q&%@G zHQ2~hKiEXywZb(yKQ}kEC^L2Jsr&ISxU|YeS)pd?CJNiB(!`>CI2Vk3uV-zURIn?o~N8gW{tpU~#}2{ij5sb$d| zN~26aMUvVlK${2J0?KMR6s|b50Aub$k|fdMJFcJ97SRpu23kTlBMnP<4&8d6Ld)+$ z{7tliZUg5Ex)Y6eqj8la`j zV5M$PD8ulE;G-Dp(F^A*&&#x<~PHZythBa*W+28{I;=1^8xwIxWUI=)3T>%Xb?kZwlmN1L$b&qN@ z9kuLdM7X7(*@*djL0Z@0g3JeWwivwAXCE z4zl%XrBajkq_!L^w3|&;@3d>>W@9IqSLJ%ECaJO#EbS?~)ev8s^w5CYcZeO#S0q&m zjZuQtu*vEz=&T^NqQ8-9RoHAo;^k^mW49yi%6hq3kwI*=F6&wo(j?OXH>!oL#&}jM zY&3$okfv(jnF`&y99r{B!u|xi&Cq36O24clAA>uZpVx5Hdj!Mkp zMzJWCiD@|{v4Rg3r^mv!s}vuL%BC30d$kx}o!_j&=p@K|JA`}4!q4GV|$f2U5lbSBGj(JGZWP5s54a!Xt~Trd0$^Bi}Y;$rU~+%n+D&)h%Q CC25EN literal 0 HcmV?d00001 diff --git a/ExEcommerce/__pycache__/urls.cpython-39.pyc b/ExEcommerce/__pycache__/urls.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a9cb73bc279038203e256a8cd4aa92d797a6a1dd GIT binary patch literal 446 zcmYjOO-lnY5Z&yiU$zxb{)fFZcH5!_5uq)Jpa@$pdyzFs+tl67l4RBP+TY^AzqD6R zp1lczlUkt@GV|V>VP;6;cKg5qdpo<1zaV~CvTs!&mvHqJIOZ^vI4Oz{ve-@B)Qh|n zM;JNWV;)D#%Cfp~0b`C?WrMc33b2_g9y)&G6S_G*Dl0KdMdrID&SSGEYa*jb z!T7qm)yeuWSCSRfNKN8g0Kfa^okAsg-KGmppJZYF(#NA6eK;NVhl6gfyDhu*>(L=w z#@SqUsLYHKkIIDw%H~eAy_5%v!dAvw7+zwlmQC=mo8cP@OjE8Xp9cGk d*x{XgRo2f_c!7jpAQ-CcXSL9g*Ftc9egW7+e*XXf literal 0 HcmV?d00001 diff --git a/ExEcommerce/__pycache__/wsgi.cpython-39.pyc b/ExEcommerce/__pycache__/wsgi.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..462d562817b355220e8977d3c595f1104eb71b9a GIT binary patch literal 607 zcmYjP!H&}~5Ovb-wuD{8Va3_kN)T6BxFECw(Nc=o?jcfVOo#c{fGttu%P zbwaD<(${k>u0MW|1%DyCoYi472TdUY?$yo@ZXLv8EFM=>$;J;Y6E6MC|`2Wl&fR(0ePIplOBUH!1d z`U9C}p$GRD$gKrqNe)KAJ~x`K$VjtI(}N|~!un~=1xtoWLf#4{^(7g>Hr2V?Q3Gl6 lf~3z$OYJ;qqr(*9YG3zX9d~o(KM=Bg@465A;aT`7{0GG3zOw)T literal 0 HcmV?d00001 diff --git a/ExEcommerce/settings.py b/ExEcommerce/settings.py index 274e968..5bcf34b 100644 --- a/ExEcommerce/settings.py +++ b/ExEcommerce/settings.py @@ -39,7 +39,8 @@ 'django.contrib.staticfiles', 'Productos', 'rest_framework', - 'rest_framework.authtoken' + 'rest_framework.authtoken', + 'Checkout_79495131', ] REST_FRAMEWORK = { diff --git a/ExEcommerce/urls.py b/ExEcommerce/urls.py index a28b9fb..9a8f8f1 100644 --- a/ExEcommerce/urls.py +++ b/ExEcommerce/urls.py @@ -3,5 +3,6 @@ urlpatterns = [ path('admin/', admin.site.urls), - path('productos/api/', include('Productos.urls')) + path('productos/api/', include('Productos.urls')), + path('checkout/api/', include('Checkout_79495131.urls')) ] diff --git a/Productos/__pycache__/__init__.cpython-39.pyc b/Productos/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8ce6d9d9104dfd1aa6deadf09958b239c8a02924 GIT binary patch literal 194 zcmYe~<>g`k0-lE+i6Hthh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o10fKeRZts8~NO zwJ0yOGOZ{-F+<-aKe;qFHLs*t-#4>3Ge0jRGug<%$VlHgGdU;USl=bJEI2={q&%@G zHQ2~hKiEXywZb(yKQ}kEC^557b_G_vZgh|m_iD8jCn-eNLaQ+9VslB#_hdlY=4+{BZw z;K|uyp#%Bz&G64mBK!Rwqe#DQ{u^kGsmIA##{4bBXZ479xUpW^5}*& zYN%Z3IO8EC7Usrzu;H{YOPp4qJUOuj=Z(UU?D|4)OvT1aYw&~FBO1DuUo9RTSSL!b z4XjIx@>xt!ty;4acg7iP3Zt^~EE8j+D!dRAc*(K!uhK%EU5WfsOy8yo>l&Q=l`v46l?8G4Tpa zoD)=f(*1mQ=le4sjfMy){JiG(puZg0B_F^9*dBq9Na6yOIK>!UA?Zo-jwDg|jijFR z6BO-zLl%l~8(h})R99KP63(+r7{CPB9)eIP#S+15oD%6l1=1ee8ZFnN(Y7zp23yA> z^4kGp6)zQI?U1n&G7D#ij6JP+@fY!({y-*x4xRWB^v)_{X{Jo2Hkr}Ii>U0xzJ^)j8My%Zl|KWuI;$q7y|9w qy{rdffIGZ^jrQduuU2~O@{Eghk^kv>%l$(;IPX`wa98T;gya`iqGn_O literal 0 HcmV?d00001 diff --git a/Productos/__pycache__/models.cpython-39.pyc b/Productos/__pycache__/models.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2e976a6c54cc32bce8b041f7901b6e3a5a5c172e GIT binary patch literal 2194 zcmb_d&2Hm15EdobmK?=#oWCvlmv*;523osFe@;cwg_9IPyG8-K7hMEKq!YQ4=#J!W z5^PV&sldL&_PCGGH|R6)+EZSkr_M;R<3;U5ft8@)a5x&ykl#o0_4T@e&z~QjaJy<4 ze^Y1iv9a?le%Ub!VF(r*3G*2j}RIVws-h=fk$C?Q|N)x^f!x z^yiQ*k3p)bN=`wdW@j=Uy)>YK9{q8fw3z>nfq}tUXw77Al*dW7LIU59YAlPq8IV|H{|y-hDbNB+1SEttp03*I_>m8Ld4^? z?eENT%sPm8v_)44e0UdQX*)+xZ3~`rOk*8Qg?(Ye3QSeW?I?Z&$1^I_usn9PF^k(N zM_);M1tm-D(rLB~y9Ht>uNh>U^C?~zJGMg}htrrt57%K7g*-%_zrQf$+w&=xdG^~6 zpheklk)Zu6$N)Q}l{7e3AfvPNdwE%aS=V}x2ffFKN3f4R+B->ec_vHZ_|*wWOhCIs zd65^?@z;dRLWm}m7wl5lJ^HVH94lVBXb&@+=k8Y$4k6bT$dPs?pe7RXOQ4cU0zM?| zo_q6y0tigByBR4&z$SC>Z4ecaj3%pB9INnJO~@bc*Z)Vzu~*QL5h-6ZkenOk_2W0o zYe(06cnzdEhe*LY7``AC5cGz~9gk0Q6{PBEz=ik^;^su5J)%oMusv$=^4r6cvu*aT zto={-+m^0PvnfqcELm}C7u&ZIl^qN?LuKne!`Z3bZ*Q)~1^o+;NYF~d2PC>AJ|@vd zq1{8CmuIJ68Oab&){oHayP-n3q>;EgOqXrrC+J8aGdk;M+vr)22{h7gSG6m~JUvq# laax|-l_zwg7w9ZABFAMA(azW94e$-oxwu(9tF_kJ{TGsG($fF{ literal 0 HcmV?d00001 diff --git a/Productos/__pycache__/serializers.cpython-39.pyc b/Productos/__pycache__/serializers.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..938a850066536dafb5fb848a345be77b37f7b01f GIT binary patch literal 1320 zcmbtU&2G~`5Z<*N$D~PHO8F6Q5Dqm8a6_n4Tfrp}Qo_ZTmGQ2@#rB3-htgil3-Aiu z`bv94oOlIJ%($_Vrm0k^EA47#*8A=3_sux&^*Rhk_xHQ_r^DDEa+ZgO&OS~v!bLL4 zb5`((bF!V>nXtD^y3+f>q^J0?d+tUaMq1Lxh(C|CFw&L*MuK_7m-oi3-}#G}tk3O+ zQIN%XcBa6f%bz8*u{>OK_Hml0xF{BJ$sz|~xpWZLId>vgx(Mmn&Lo@aagBEkg*Pa> zODGCcmON@n2hY1_TZ{91LsiALEkvB>LX7&p4TLD;LJ46zLKIrga!+E@rMY0x#T4r0-*NZ>-*3WHL8(qt(DCQ+P$#oOm6ZvH znaOlH$&$hI!5}=yl3c$C57oD^POFm`)OheJ9KQ^Yz8@vJC=?`WG6>(})w871CR}26 zZ+dDydeR17ZAjRFdmJ{=7+rYaQ$lT80$M1%Nb=I^QH%~!%@`~fM5z61Oy6Fw%_i3y zG^1Pg>AEMlG|H1^pHTf@3*8=E#i_MJ#r#qiA3<4v3M$F8-H^&8kWJApQIr^x*t(!n z>sPgGsPYOEHfWH6o(;s_T4IQ?`#4vqg{_+oY~u#ahDoyTz~uG;R$E!cklm&JAFiU* zOhOBDTfL%;Vz4cek^sJ0#OWvv`#@AyuR$|H`EJ;+Mw$M&W^w1{|6mP5rO~! literal 0 HcmV?d00001 diff --git a/Productos/__pycache__/urls.cpython-39.pyc b/Productos/__pycache__/urls.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9458d9ec9e0ddea4620358047acdc3dca53a96a9 GIT binary patch literal 561 zcmYjN&5qMB5VoB(Nz;by0r3vG)F{9WA<%Xu_5fPZa>)gmc+yRYJwCUy5&(kRRUoUnXcg$8UQCNhEEFq9s+VWYpWN z4OCc$qaL&q6_t^S%UC64LJ5RNQchudlgbd{FIX|^6Nqm0T`D6;WF+Iy0mi6IfWdS( zJJKWD(sC}RYm%owaWcu73-_YGbaB&F?I0niE?Yq@hPHpBhaOBGxY>o#a;SR!;^N%J zn`S>M*{N30^};lx8TROR$^LI@nO1jU?3uh57CNEe)1)$kJKAN0Ix{%l)-Wo+>)yN?*0A) D@I{}& literal 0 HcmV?d00001 diff --git a/Productos/__pycache__/views.cpython-39.pyc b/Productos/__pycache__/views.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2c977eb6951f551b4cbd8458af41512ac48301ec GIT binary patch literal 1531 zcmbtUy>c5j5C(9+B9Dr!NaOq!E<+bO4I_7%j2(#+r!Yq`&nd3CK@Q;Lm^(rSK*{n* zmE5H8J6L6&BX5B&lSz?RNR{2A&XhcpD&Sym@$C|eZ+8Jc81x8?R#f;&M84UXR~gfN0A1XHdVr3bC_X~*J{v3T z9%9=d(Ab@rw#a{<_zUpu3NEN%Z%FP5Px$clMF1ra-QW-^v#?xOSojiqr5l(QoQE*Y z0}z(X={t5!E}8W%7;gBMU3%8P@aDl4c91v07W5mwIESr!>#f)1+}0Ys$%6-5J6~|i zhraWTtYtMic4_)q1 z#LzffiU*)razW=*(6{uGT`(l8zl5)MO(?OxV8W{?QU%g%9@y}T0d0RWr1}&1_Yy<@ z{_CsCs%#kP`><+p7gwe@<#i>1A3v44r5sAFl{Ol4JoNOZ=#5uYe~w~Z|CU}@YRRoc zyJ?>-me3e}Kyv3U$(7?|7<|xw8oNP1xVv{7rR}X9FnkPi)mtnMG$NDXz-?-%L^0Fw z8k{Npi^d*t_wRyxuxy{EmRi31fz?=Umn)|ER@d=n51tiS8@Ibgx(dVX&y#0p{t@24 qskH6gY}?&M9fSwGm8bVyT>SOw!TN?GA-q!wBr5S@7PIYO+y58Ht!DB7 literal 0 HcmV?d00001 diff --git a/Productos/migrations/0001_initial.py b/Productos/migrations/0001_initial.py index df81460..0e07a1c 100644 --- a/Productos/migrations/0001_initial.py +++ b/Productos/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 3.0.8 on 2021-09-16 20:14 +# Generated by Django 3.2.7 on 2021-09-21 19:31 from django.db import migrations, models import django.db.models.deletion @@ -29,7 +29,9 @@ class Migration(migrations.Migration): ('descripcion', models.TextField()), ('foto', models.ImageField(blank=True, null=True, upload_to='')), ('calificacion', models.FloatField(default=0)), - ('tipo', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='Productos.TipoElectrodomestico')), + ('marca', models.CharField(default='', max_length=20)), + ('ref', models.CharField(default='', max_length=100)), + ('tipo', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='Productos.tipoelectrodomestico')), ], ), migrations.CreateModel( @@ -40,7 +42,7 @@ class Migration(migrations.Migration): ('calificacion', models.FloatField()), ('fecha', models.DateField(auto_now_add=True)), ('contenido', models.TextField()), - ('producto', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='Productos.Producto')), + ('producto', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='Productos.producto')), ], ), ] diff --git a/Productos/migrations/0002_auto_20210916_1521.py b/Productos/migrations/0002_auto_20210916_1521.py deleted file mode 100644 index 096fe8a..0000000 --- a/Productos/migrations/0002_auto_20210916_1521.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 3.0.8 on 2021-09-16 20:21 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('Productos', '0001_initial'), - ] - - operations = [ - migrations.AddField( - model_name='producto', - name='marca', - field=models.CharField(default='', max_length=20), - ), - migrations.AddField( - model_name='producto', - name='ref', - field=models.CharField(default='', max_length=100), - ), - ] diff --git a/Productos/migrations/__pycache__/0001_initial.cpython-39.pyc b/Productos/migrations/__pycache__/0001_initial.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dfc5c5d880cc3c2e09c26af7b898df477a231223 GIT binary patch literal 1451 zcma)6OOx9~5SB*rLw?0^9B=}J=fxLmama}jmBrqr7HU&e*<5^4jnyr$97$tF(q?zB zaP@x(NB#*n?sMhjUqDr=py-hwn+hC|N~8XIX1c%mdS-aDSu^PAJ^q&eUNMY6GImCKxjY=FD0cGaF0GGBB{PvaEthuMH(AukCxy`uuJ@4OFRj-iH^Hk0A=&0lolHKsUA9EgQT?kdeB+N*7)c{;! z0+{$ArjqI9)JH|7&h;Uami9QuRKQcMrE*3WTyD+USwHs$dZ-KiWXNp(ZZqO+e z`11tQRhwdo!Bk|ZBj zPJ9u^D1Dp`-GiR)?QP>89UXn{?c^G)uBE=t=$bRquc@gro7uK)GS)R)X6G;Vw_V+% znprbD>TD>%Au5rij-sD`zXn0Omy%w!%L+I0xH1Z?Kn2KG8yGF1M0w Wt*7Ku)u-FSf2He}>S1lOYW)M6x2mN8 literal 0 HcmV?d00001 diff --git a/Productos/migrations/__pycache__/0002_auto_20210916_1521.cpython-39.pyc b/Productos/migrations/__pycache__/0002_auto_20210916_1521.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f3ec5524c660a3f34aa38d20b22c8b8b4ae9c278 GIT binary patch literal 691 zcmYjP&2G~`5MKW!c1R@-T;KsfxpWglk&qB7>JMC6A*Eb=SuLJ%>d5wnT^rgXf@>dy zSK1rmlvk*PVAf4&#+uQ5J3l+~t>xa{h>?tcy_e5?#(q1nDw7G4%$xQyHdI9LuLga`&VJ`8WR=kew|*`6=_EQS#c@W3W#+nZ^O}^z( zSb+^R7Hgo|^GRZ3(Ps!@M?z3VS0VXhAwGAqa#aoiuCM`Y@)C_E=9!J(0-U;TI&d&K zx|F)dcBEFg;qfQak15)l+i(1%L2Y<}y20y0D|yL}Ro>Ouw1%IRhM2!7^K_b~{HV+; z^_(B$m$@q1uTtYYJ>c^f{N(B+S9Og#$BUHzr;6Xd9VgOKA-h%yYBig_n!OaWgLJmP zy4LRh7?7GLWa7a88%Ck$(>MOJ3-Edc)!-2=la?B^&Ne0 L93#fD^f34b_pG?k literal 0 HcmV?d00001 diff --git a/Productos/migrations/__pycache__/__init__.cpython-39.pyc b/Productos/migrations/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8d6bfbabca340053a45eb385f1ac53400c8c050d GIT binary patch literal 205 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 YP0eMm&2M5mRQe&AN=Hn(we<4(KS%cChyVZp delta 3724 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 n*4blG()9czP From 9a4636b73063c1012b06b8355a420e0f7f7c6cce Mon Sep 17 00:00:00 2001 From: Ferney F Roa H Date: Wed, 22 Sep 2021 23:22:28 -0500 Subject: [PATCH 2/2] Fixes #13 Solve case FFRH --- .../__pycache__/urls.cpython-39.pyc | Bin 526 -> 576 bytes .../__pycache__/views.cpython-39.pyc | Bin 3514 -> 4138 bytes Checkout_79495131/urls.py | 3 ++- Checkout_79495131/views.py | 24 +++++++++++++----- db.sqlite3 | Bin 196608 -> 0 bytes 5 files changed, 19 insertions(+), 8 deletions(-) delete mode 100644 db.sqlite3 diff --git a/Checkout_79495131/__pycache__/urls.cpython-39.pyc b/Checkout_79495131/__pycache__/urls.cpython-39.pyc index 954bbc4d4889b0a51b2f1af2c4831b22041fac28..173657b40f895c0b1fee14274e91fa608b76442b 100644 GIT binary patch delta 219 zcmeBUIl#h~$ji&c00akrdnbxBP2`hdteL2-8P#g)RE%9g^K z!q&?S6b13wQ`uA4k@y^`94Q=7K4S`JDicr@cQa!%Q#xZ5PYPEsgC_UH8M-RWx44`W zi;6N!@*M*_Z}E8MrRBTkm1Tl?+>S*hnaQO&6Yr>qL~$fSIQdnq$wj3p`hJ?clerjO onTj|j`!H&=2?3p4Bs95}v0g*~$P{4YVG&_sV-jElLKeP%0Ie4^%hp6%F@gb#gWR9#hJpI%9g^K!q&?S z6b13wQ`uA4p?t;^j#MU~C|5IMGgCTa6n6?|FoP!7#5KB%OcQTOPiA72=c-~&E-FpY s_tWH=Y|7|5xt>vjO%P~hk>KRDjP*i%K&AjA4~qa38Y6YT`kA_kQSNt7_qI&>pg2u)2_%}m9ru5hZ_ zfzV@+xDiDduM0szXBk1kt&0H{F2sc!SLH95pWsG4r#b^M6T~j=>2uHHyXT(A{c-Nw z#j@IsUW~+8a;1WoA~{xErQqdAjWt(8Uh&mP zj}6y|P1lSq*D7RMREllaj>~R29&^W-@VemZzVV^p8v)y|982yvN=)BEiFGQOucD~r z+bFV6MH7CxEjVKjDb9PpY}CeY1z9(_u^;sC54z3u=0k=mN8$=wd?7DyK^FD~QPK_| z^dd*f?QIVr%#!USJ^(K__WC!I-Tr%FlIy3o{3?4;qeSG|2sq6pFN#1z5lDPS{Ek`t zXYpfZ^6OHqDv_la`nehaB#?s4hf$+c{ymcHm*?UX)u~y=>q`;i2azj&UBaO3<@J=7>-*@FWo#$%z6J z#7`0-V3Dw#?s9r})>(`!8Nb*=w*&niV7+NB>`k@-=mVts%;= zQQWtJzPW_u$yGmyf-ES4bL7WD;vd)(yrk*uB|fEf*%BXUtC-vS+7(kojH|fPI)8`N z%L*n*#e|G%%IEdBFB_;G-I_9S7CqM~fmnO~m44~vT|!Zj2+U+9c33$DNw(hHYeZq1 z_2{feKT0F5ZCq)S|1C}*Ju?))k?spj$YfvirH~!7Hu6JpU&+*>d~yqFXiv~#HlU_k z>_LE4>o^*ePy_#2EJr$%ndiy8C{96Ua9RXdK;bo9X)&dE3mreaOZDts=*TQ+ISM>S z7!4w8M4lkBz`rQft2@Z1)F23;!a6d1i_P-iwa=$4vZB(#I1!zQ#P8~hv+!6VT9V&2)|tz{H=@;IE()K~5oAQ(827oBZSq}nL0LlG4IY{wY1Ez_ zSmuA4^PA^TE;^o0z6kWX^%T2Z^!z8*fd8r*n{Wk9VU-Bg{%kLehNnrYvqiz}vn1m? zr9JH1PfJTj8@O-dDr!XO)pb)fO(1#8nas-&q*?bScyVwifp>wrE}!|guz}lyq@Ru^ z#+^E+O*1bW;4?#>6@TCB-%1+k?F6#kAZw+?tmYOvF|7@s%)cmD0V8dlow=D%1CQ?g585n5q^1bUD;w2V8W?l!X{-;4$#7}%lc zB(F<^RM2IEj&33r8aHCMmGxwUNw#q!SQ{_AOsS@v2A;*#FIM9vOk~Az!=?(y5!>UNL@=%Z_L zkqpzv@@hG)Du-|)V9AN>dcGHLvr`uLhNR<4iJYUJQX$>+oiacS`a|ibW7;NtsAgr> zh{*getwcYnC32OX(jWD(Y*O|QR@BKhSXs#WcYTOlr$xgbNU2EAYcbkg#OFvTeFwkKw1vb-{#UlnhB!@`k5GDg5Ae{UKlz| zH?4NEKwnxDNY0kkH9Lgx1pX1L1TR8XRZZ43V0gJT$;>S^s&N?l5eSGRJa~x(UKCg6 zzzMutA>0I!ZM5$P2XVO=HX^(rx|r=aBQu+vTX!1s;b627LR?+Kx1gf|zNp%Yhkc#4 lEK4JigAlJbqMxz_`ZL>gnDvr@ZDOQD<#Qw_ especifi las rutas med 'routes' -from .views import CarritoAPI, InfoEnvioAPI +from .views import CarritoAPI, InfoEnvioAPI, ArticuloAPI router = DefaultRouter() router.register('carrito', CarritoAPI, basename='carrito') router.register('infoenvio', InfoEnvioAPI, basename='infoenvio') +router.register('articulo', ArticuloAPI, basename='articulo') urlpatterns = [ # lsita de dir locales diff --git a/Checkout_79495131/views.py b/Checkout_79495131/views.py index 28fb165..9ffe551 100644 --- a/Checkout_79495131/views.py +++ b/Checkout_79495131/views.py @@ -1,12 +1,10 @@ -from functools import partial -import re from rest_framework import viewsets from rest_framework.response import Response from rest_framework.status import HTTP_400_BAD_REQUEST -from django.shortcuts import * +from django.shortcuts import get_object_or_404 -from .serializers import CarritoSerial, InfoEnvioSerial -from .models import CarritoCompra, InfoEnvio +from .serializers import CarritoSerial, InfoEnvioSerial, ArticuloSerial +from .models import CarritoCompra, InfoEnvio, Articulo class CarritoAPI(viewsets.ViewSet): @@ -41,8 +39,8 @@ def partial_update(self, request, pk=None): carrito_s = CarritoSerial(carrito, request.data, partial=True) if carrito_s.is_valid(): carrito_s.save() - return Response('Actualizado') - return Response(carrito_s.errors) + return Response({'Actualizado':True}) + return Response(carrito_s.errors, HTTP_400_BAD_REQUEST) # No recomendado para carrito de compra -- No queremos cambiar user @@ -67,7 +65,19 @@ def destroy(self, request, pk=None): # return Response(pk) +class ArticuloAPI(viewsets.ViewSet): + def list(self, request): + articulo = Articulo.objects.all() + serializer = ArticuloSerial(articulo, many=True) + return Response(serializer.data) + + def create(self, request): + serializer = Articulo(data=request.data) + if serializer.is_valid(): + serializer.save() + return Response({'Arituculo creado':True}) + return Response(serializer.errors, HTTP_400_BAD_REQUEST) class InfoEnvioAPI(viewsets.ViewSet): diff --git a/db.sqlite3 b/db.sqlite3 deleted file mode 100644 index a948a5b3d6bbb9b7a3cb7c98e677087d85d48c99..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 196608 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 P5D1KG|DvGv?*aaQ_r!ro