From f0220cce8772710bcc313095af61892a11b755ff Mon Sep 17 00:00:00 2001 From: Juan Diego Bohorquez Lopez Date: Fri, 24 Sep 2021 21:35:40 -0500 Subject: [PATCH 1/2] Fixes #32 Aplicacion de Checkout para ExEcommerce --- Checkout_1095834454/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 268 bytes .../__pycache__/admin.cpython-38.pyc | Bin 0 -> 432 bytes .../__pycache__/apps.cpython-38.pyc | Bin 0 -> 570 bytes .../__pycache__/models.cpython-38.pyc | Bin 0 -> 2247 bytes .../__pycache__/serializers.cpython-38.pyc | Bin 0 -> 1396 bytes .../__pycache__/urls.cpython-38.pyc | Bin 0 -> 650 bytes .../__pycache__/views.cpython-38.pyc | Bin 0 -> 3699 bytes Checkout_1095834454/admin.py | 7 ++ Checkout_1095834454/apps.py | 6 + .../migrations/0001_initial.py | 49 ++++++++ .../0002_alter_articulo_producto.py | 20 ++++ .../migrations/0003_auto_20210920_2137.py | 25 +++++ Checkout_1095834454/migrations/__init__.py | 0 .../__pycache__/0001_initial.cpython-38.pyc | Bin 0 -> 1547 bytes ...002_alter_articulo_producto.cpython-38.pyc | Bin 0 -> 881 bytes .../0003_auto_20210920_2137.cpython-38.pyc | Bin 0 -> 975 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 279 bytes Checkout_1095834454/models.py | 47 ++++++++ Checkout_1095834454/serializers.py | 19 ++++ Checkout_1095834454/tests.py | 3 + Checkout_1095834454/urls.py | 15 +++ Checkout_1095834454/views.py | 105 ++++++++++++++++++ .../__pycache__/__init__.cpython-38.pyc | Bin 149 -> 260 bytes .../__pycache__/settings.cpython-38.pyc | Bin 2539 -> 2675 bytes ExEcommerce/__pycache__/urls.cpython-38.pyc | Bin 346 -> 512 bytes ExEcommerce/__pycache__/wsgi.cpython-38.pyc | Bin 560 -> 671 bytes ExEcommerce/settings.py | 3 +- ExEcommerce/urls.py | 3 +- Productos/__pycache__/__init__.cpython-38.pyc | Bin 147 -> 258 bytes Productos/__pycache__/admin.cpython-38.pyc | Bin 323 -> 434 bytes Productos/__pycache__/apps.cpython-38.pyc | Bin 0 -> 484 bytes Productos/__pycache__/models.cpython-38.pyc | Bin 2147 -> 2258 bytes .../__pycache__/serializers.cpython-38.pyc | Bin 1279 -> 1390 bytes Productos/__pycache__/urls.cpython-38.pyc | Bin 514 -> 625 bytes Productos/__pycache__/views.cpython-38.pyc | Bin 1484 -> 1595 bytes .../__pycache__/0001_initial.cpython-38.pyc | Bin 1339 -> 1450 bytes .../0002_auto_20210916_1521.cpython-38.pyc | Bin 644 -> 755 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 158 -> 269 bytes db.sqlite3 | Bin 155648 -> 0 bytes 40 files changed, 300 insertions(+), 2 deletions(-) create mode 100644 Checkout_1095834454/__init__.py create mode 100644 Checkout_1095834454/__pycache__/__init__.cpython-38.pyc create mode 100644 Checkout_1095834454/__pycache__/admin.cpython-38.pyc create mode 100644 Checkout_1095834454/__pycache__/apps.cpython-38.pyc create mode 100644 Checkout_1095834454/__pycache__/models.cpython-38.pyc create mode 100644 Checkout_1095834454/__pycache__/serializers.cpython-38.pyc create mode 100644 Checkout_1095834454/__pycache__/urls.cpython-38.pyc create mode 100644 Checkout_1095834454/__pycache__/views.cpython-38.pyc create mode 100644 Checkout_1095834454/admin.py create mode 100644 Checkout_1095834454/apps.py create mode 100644 Checkout_1095834454/migrations/0001_initial.py create mode 100644 Checkout_1095834454/migrations/0002_alter_articulo_producto.py create mode 100644 Checkout_1095834454/migrations/0003_auto_20210920_2137.py create mode 100644 Checkout_1095834454/migrations/__init__.py create mode 100644 Checkout_1095834454/migrations/__pycache__/0001_initial.cpython-38.pyc create mode 100644 Checkout_1095834454/migrations/__pycache__/0002_alter_articulo_producto.cpython-38.pyc create mode 100644 Checkout_1095834454/migrations/__pycache__/0003_auto_20210920_2137.cpython-38.pyc create mode 100644 Checkout_1095834454/migrations/__pycache__/__init__.cpython-38.pyc create mode 100644 Checkout_1095834454/models.py create mode 100644 Checkout_1095834454/serializers.py create mode 100644 Checkout_1095834454/tests.py create mode 100644 Checkout_1095834454/urls.py create mode 100644 Checkout_1095834454/views.py create mode 100644 Productos/__pycache__/apps.cpython-38.pyc delete mode 100644 db.sqlite3 diff --git a/Checkout_1095834454/__init__.py b/Checkout_1095834454/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Checkout_1095834454/__pycache__/__init__.cpython-38.pyc b/Checkout_1095834454/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3d3333c4514998555f67147d39681bbae5dface2 GIT binary patch literal 268 zcmYk1%}T^D6ooV3LWFsTxOAb+PX}g1#E?V?)D)6dH-S*nfKl5FNh|tDE`1%h^9b%- znXL4{`7YA>+ShDcmH-ql6Afa5m!~AmsHQem?P~YN8EMJx%Sf zQ`KNeaIY4g!-lhaDkLL_K*mWUYr#+n3562z8gW8}LZE;>KJnqjzFtd^9qVQEUpO ZwHw^1^~L`E>-eho-SlFw^DE!U;1}CkMT`Id literal 0 HcmV?d00001 diff --git a/Checkout_1095834454/__pycache__/admin.cpython-38.pyc b/Checkout_1095834454/__pycache__/admin.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..919e31210a80f97f2609b3ec1faf4f20edf844cf GIT binary patch literal 432 zcmYjN-AcnS7;V;VR^9dty`A9LFE|-uX)6R~3;j_T0jW)#nQb$YcIYGc7JBK8FW{T> z)~mgOSEkd89mx64$;Wp{zOdasQY2m>jJ{<3uFO7EX)fgvGf7y%AW>4V06@VttR}TU zAz-Dx)k))B-u>(5o<68FuKP;2v6Tr*7nF?%r!?DwKL<{nuD0mlRg^7RFJ@WJ={>K> zX4y;`CW$EPg65>uI9XDW6JB=Ah;y1Vlcj4OiBdCoPU9kB^Py!}I&`ei4?Jkhb<5U$!wC$>vOQ$P5hf{( z8M>x|vP=)4sSo?Z0WzUEclD9Xv25S)Ja;Z_HS1mlw}xjUkF1$|J>!%KWIx+6OH;yQ tg3Lz}Kd~ae8}z4>v(b1w8Kd1^dh3@`o5`OS3Aw0tBs57aps6j;0>5x#c4q(p literal 0 HcmV?d00001 diff --git a/Checkout_1095834454/__pycache__/apps.cpython-38.pyc b/Checkout_1095834454/__pycache__/apps.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4937997833c807ca88153fcfe3cf0a822249808e GIT binary patch literal 570 zcmZuuOOMkq5Vo7FRQ7QJ4qTATu?MPsbfsOiLTi#Nid0f5X+erCStfRimn05xgMcgi z84ig5lPf3w0w>1pqTK@{&3InlC(q2{;9wVlJUNTSPk4X1;I8-(T!LBxMk0wzRN)+B z^b*N|^u8hKDg4#T2hz{bXy-R{p%L!y(WVJZz0|A1W$p@w;1bk61fx)nB?2_gJvqpI z=>d!1KMLNd;=SqCM~CO9XD5@%>150H<*~dL^~#Lp+i_*2D((1%UeRuCuCyv;|KJ~x z-y)OIPCw+l7M0?>-{l;DUFrON&Odabys6xmYAL#M%>~f$<%Z99weP5POWK$}KZ0j$ zVO49{btmd`HmgW_*%C5t3}9i>?u(vZYSxX9*dOs6D_NJf)6O~NQ;v=CBNx-jgO zw%XKW9tY(3@c4)YaWI{c6W|G>jHc;q3ZcW!uI6uO8nIM0#_F|cwXrPv6cwhbR9h(a zpP89x8ar-2w;p`l-OxHS#6I3+l9AW%-E7izwgWex>%E+M0VA6{%%_T1ghy54>7 EFIbR~^#A|> literal 0 HcmV?d00001 diff --git a/Checkout_1095834454/__pycache__/models.cpython-38.pyc b/Checkout_1095834454/__pycache__/models.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..39f988f2858e1c97fde27c9dc1d1cdc9920dbb95 GIT binary patch literal 2247 zcmah~-EZSW5ck?n;-pTSmU19YKmhR(KFVFMCpd&qLz12Xt&5TrBrB5Hdbh2E;|**3 zxT}sQ?zMlx2?-wWiN6QG@^t?KPt2_AG~enyYhTVlu+?Gvby&FJla# zS3tMWJLpx=Yv=kB=r+WF_Byjz^^xW-vl?51?+UY79li~=3^A=_%N;6Zkcf_$&LoYW zGI0BZWVI>1?}a=%PEJM;s7=#Ec#-(Yql`(CucP`w{QT;2wv~2TuRn-eB18w!6)~(>)lD2L1MKv)gM9+s>%%bbEtw+oz0A17D2y zf;bRSbJXuNH*aj-9C!Mi-Tme*IH%hiwg-d#T^Qot{hiTw?Llum;4={eE)ZKh?%nVC zVmjs0=i|-^_kR#+;@!M)=k}+!wzh6>jq`+V%pPPF&x;f3c{cug9fU?suRRO##`%&< zs3CF+HDn>vhL8tG!655k$TdVoHb7*hL?krCaqdSyU4PDxTJZl~Bqr(K{n$}DZObI^ z(@?}O%-xaG>(9AcT<5e_Gt2WLI^~|1)jSUnN<-9b&-*c@VLl@fp{&|Dp>ikSA(KmL z+@%T6#|UFq+X)3tl)*KbpNP!vM+raX`6jpK(sqF_oh`%580PNRHvc}9;Z6LJ-f zkr=yNN1;Hx5D2G4%%LM_F^()^7eC!HEK|+;F!9WT%eUc;zXGvXsyr`Ja;B>iHMs=^ zS!Fsi&J4E(`Vuo)35wHZWmbV=Tqshgj-|{h0Ec?0ipYa@!4p1e>GE}Om6=f*hN=o> z6~>oRJTJeOVHV5pH}ZQ?g8IZ*EW(eQEi#C!Ey98 zf1uKyRXXiqr`_$zH(*U>eN&)g4SOTcIoRD*aY_V3zKue$4TD$+Y+kqWRhU4RG2TQL zX+U%~kWASxQEYx6g|PTPC}t^g<+nhgBhd;SZv+cSXCUbo^!kFnoZn+`LsTFOR#xpt zN1_+q3xq^8CDL6Yq)#_NTp}HU*MV34uYz<#O?4MY8G@H1b44>#6CdJcJOx_j>fCoh zC#Ti8DqZqjJQrb-@1am`koNK|5UxdMJPZRS+$sxzM?j>=HD@%4q4xNU$^<%8lnA%% z2PtqXkMN>3T%_#-I1Z0I?+=ZlKj2rFIP0`3S(Qy_bSyU5p(2ypDA*Ej4e literal 0 HcmV?d00001 diff --git a/Checkout_1095834454/__pycache__/serializers.cpython-38.pyc b/Checkout_1095834454/__pycache__/serializers.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..271a1c8867484f4c20a15813e4b9c00c1e3bb53e GIT binary patch literal 1396 zcmbtUOK;Oa5cVsM^JogC7dZJEB&t3oiV&)08)T_R;f*jFXo10jkuMb~H0P`>p4j84s71ngXmJwiA7n1mPDNi%S7x4>tEf5P^uP zkcqx1qAsOUCi^nzGEq`xAiNVuji}!RqEh*=b|(8OcBE;u0#x5=yj6K-=83-!)A`yHEUJ{7} zFG**TFB2JFQOZ>_Vl0^yW|56q#QPQeEj)aw!dqRyqq46M(XSB+kmS>+cOk7E&`DI* z!!SzIFm$_WsfA%4Wi$-SW*BA#nWm_>!|=;AO6Mn?>riD4;%Hi`qlBh}p9`!5pHYe5 zKh0Oc5J=&{;WWy3gI-Q8mK;<4g+6qh_qNw}EW^?r*BbT*o@4CmmaX>Qt-e& zvEw4kD2r)eex~tJF`a}P>$^KIx3;%;wu6PTt&P8x3er-CBslhyCMqI(1d4mEFbz{{ zpuk3~+<()ZY0G$^g22t8O97#>Z`JMoeb6!3B#EbK@qi9^avh_pJ;N-a?l@umfGvtsK3EK3CGTEi)~4hR%$D?KiCi+KmY&$ literal 0 HcmV?d00001 diff --git a/Checkout_1095834454/__pycache__/urls.cpython-38.pyc b/Checkout_1095834454/__pycache__/urls.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..940088648b419342c04111904d3760ba68eaa4a3 GIT binary patch literal 650 zcmYjN%Z}496t&Z|&Ga!U8`jwti87B?VnzrNB|$_gElOLEqDWPU-Htm+T-iwn*mli- zz=9w0meu?M8@TQiX>9rEoa@IqzKd?Rg zdt;5G4(ZNN|MVVQQQuJJHYsmZlND)J5!%P9>(NzGWo5{#l8SqXj-ZO4sb-o8!Ac%A z-3J0?>vJM$k>oV85>c|W%DA$eBa2$BSn(w-c8q^(1;B0p!0V}~$cst8tJ-9f6l*@H zL?(p+R-y)=o(d|<CK@laHjplc=}YScRBay|r6`+o>6 zI@u|4-KaqH%y*2##bujo^G{Cb$06Nv2@MvE%h>+Z=OK+otHmeIgHJ!_|b{{f?Xy4C;y literal 0 HcmV?d00001 diff --git a/Checkout_1095834454/__pycache__/views.cpython-38.pyc b/Checkout_1095834454/__pycache__/views.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6b30350456c5c6de24020ecf092d19c9784f0bab GIT binary patch literal 3699 zcmcInOK;mo5av@NWm$IYIBEJ+i?#^U#?2FGf}*t`DXEH7E+jbxSOEgV-6T{bQ5jNB zV%WVT*W7zdj=uB<@!C_4y%s%mW=Tqv?KB1IP~dVoyE~k3X1>|g*5YD8!t2l9esKOS zNzxzmlD#y1*}yya6&ofoc_0mCTb2*@m4Px;ZB@wCfi~1_UG%jjTvCv|RD9XMJD`S3w#+13VKP&mNw&&Vrr}d# zC6;6PXR@ucC1x-adpTBM3pkc%Xc|5ZrlWz&QK9Mpc%fhUso^T9GQG%+bXV~X%GiWb zUw)yyl=hTR-4$PauI#CywyXB_r*d1`SDPKgqYa(W6Dt>$61`P_I0h$(^8TGZcf%l3 zoxvbFIX~Lw;5h@x;b$U^IiX`|krwd5-6#+I;e-dFZMdO0C>z*0$Q6R-V57$@F!vK;)QEhzrK9s%GE1f5%cx&lSmtQL3jc! z4+y)Y6y&13vy?aoL$Xfeb8(^g(=Fn12|J;*EB9q4KbQBEU4K?n8H*~ zrubl_lq6DG(~@Bs*V=mhG1}a*aWkg+dPg+jsy4*SSpaUutJMh zMiaj6C&nfrq$r3`z)9>yITyGS^3&K41Z~x#Y~T-3p2(n#XEj{{mR>q`ra;U1LJ8PM zhytpLNvJ-R_cVm1C9sqxa!46JKr}_14~y7D>OCID;K;)Qp{372zy~xbpQKb&#N5G5 zjFT$HArJ{L2B0dBV>aQMIACf?Hk6&!43u=vAuNPP1g(ah!&oqgB3RGWJw)_E$1q;U zXHJAM&u}aWV;=Duf^d2h-bY=;y8PII5Dm8%DsDJQ09fYC5AY$*oCO&uBJd71!Yya8 zcgQX95lW+!cOA}<_dWE^B*MKZ}j@Cjp$KQ3FeL_m|4s!|iExWDQjMZg z03If!sFcc*dNwN>nVhgqVjI~K*lW{nyyD2xA$+=l`s1o0W0_ZWmeWtYtvU~<1Ws7T zhbVkUvOZhUS4Bln?K-lgi_Ew|P((e)N-pZTva^ydBRI!W(BZw<{_|u%74x`=2{^O3 z94h8U8WAYdnt8s6oNl5#iG--%C$pxf1sn;pp970joTKIoY7TH?rh7()FLB;?c#97R zG8jOzW1>N^F}my5N88@<@xYv_%n)H|D*RU_EPH4U3>_CwOTsGqbVl+fN^GTml444n zn11wabK)|7`M+`El;8vzmcV>HEq)<5bF`3mR_7ocD=+Bum*Itg^m<;{CIv>s2+Fil zq^xM@bR&py2Rm6}tj!spVFp~7*DzB<+hHeFBho()Bx_oW(K72hqkH~(aNmc}orD3< zjukB=;`{i|2xxPNN`OcH-d(`0>X8o*fQ|>z>3QKgzKTCl@d0%qNKS5e_>c0p@lRD7 qPiwR@3HAvaGLWYRN5(htKKL#D=L%>WE9yloYxvU*W#y}twSNH3)c4E) literal 0 HcmV?d00001 diff --git a/Checkout_1095834454/admin.py b/Checkout_1095834454/admin.py new file mode 100644 index 0000000..465868d --- /dev/null +++ b/Checkout_1095834454/admin.py @@ -0,0 +1,7 @@ +from django.contrib import admin +from .models import * + +# Register your models here. +admin.site.register(CarritoCompras) +admin.site.register(Articulo) +admin.site.register(InfoEnvio) \ No newline at end of file diff --git a/Checkout_1095834454/apps.py b/Checkout_1095834454/apps.py new file mode 100644 index 0000000..0fbd68b --- /dev/null +++ b/Checkout_1095834454/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class Checkout1095834454Config(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'Checkout_1095834454' diff --git a/Checkout_1095834454/migrations/0001_initial.py b/Checkout_1095834454/migrations/0001_initial.py new file mode 100644 index 0000000..519f5b2 --- /dev/null +++ b/Checkout_1095834454/migrations/0001_initial.py @@ -0,0 +1,49 @@ +# Generated by Django 3.2.7 on 2021-09-21 01:51 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('Productos', '0002_auto_20210916_1521'), + ] + + operations = [ + migrations.CreateModel( + name='CarritoCompras', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('usuario', models.CharField(max_length=100)), + ('fecha', models.DateField(auto_now=True)), + ('dcto', models.FloatField(default=0)), + ('cantMinima', models.IntegerField(default=0)), + ('pagado', models.BooleanField(default=False)), + ], + ), + migrations.CreateModel( + name='InfoEnvio', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('nombre', models.CharField(max_length=100)), + ('apellido', models.CharField(max_length=100)), + ('direccion', models.CharField(max_length=100)), + ('pais', models.CharField(max_length=50)), + ('departamento', models.CharField(max_length=50)), + ('ciudad', models.CharField(max_length=50)), + ('carrito', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='Checkout_1095834454.carritocompras')), + ], + ), + migrations.CreateModel( + name='Articulo', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('cantidad', models.IntegerField(default=0)), + ('carrito', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='Checkout_1095834454.carritocompras')), + ('producto', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='Productos.producto')), + ], + ), + ] diff --git a/Checkout_1095834454/migrations/0002_alter_articulo_producto.py b/Checkout_1095834454/migrations/0002_alter_articulo_producto.py new file mode 100644 index 0000000..ec2e33c --- /dev/null +++ b/Checkout_1095834454/migrations/0002_alter_articulo_producto.py @@ -0,0 +1,20 @@ +# Generated by Django 3.2.7 on 2021-09-21 02:16 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('Productos', '0002_auto_20210916_1521'), + ('Checkout_1095834454', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='articulo', + name='producto', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='Productos.producto'), + ), + ] diff --git a/Checkout_1095834454/migrations/0003_auto_20210920_2137.py b/Checkout_1095834454/migrations/0003_auto_20210920_2137.py new file mode 100644 index 0000000..7c9a2a8 --- /dev/null +++ b/Checkout_1095834454/migrations/0003_auto_20210920_2137.py @@ -0,0 +1,25 @@ +# Generated by Django 3.2.7 on 2021-09-21 02:37 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('Productos', '0002_auto_20210916_1521'), + ('Checkout_1095834454', '0002_alter_articulo_producto'), + ] + + operations = [ + migrations.AlterField( + model_name='articulo', + name='producto', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='Productos.producto'), + ), + migrations.AlterField( + model_name='carritocompras', + name='fecha', + field=models.DateField(auto_now_add=True), + ), + ] diff --git a/Checkout_1095834454/migrations/__init__.py b/Checkout_1095834454/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Checkout_1095834454/migrations/__pycache__/0001_initial.cpython-38.pyc b/Checkout_1095834454/migrations/__pycache__/0001_initial.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9c5a34a09264258ceb112618f1af3008c7ddd0e8 GIT binary patch literal 1547 zcmZ`(-EP}96qab&mj9A8&DM0kUVG(>8Md1YOE3&oC1)^}ID_r1fFVF&L|UOMiykFq zO>Vc_yu|MI7JClf?qbLr48^eRP_~n%NF_+%cSxR}?>pp4tyb3H`E9?4LsQfKRN(E$ z0Pq~XxCuX^5k1sq`dFW#G13)AVQy@Er;!{ne$|LU^=bZ>+&E9rP;2C`VUN~8vOHsf zzzO3~EDJMEXc+f>HTU+j4&XU_@l@9|s*QD`jS9?iwqW&b zln?Hp5AUEy8QNav^Y{+>=nncA&>CHzZcK~Q2h&aR3HkI2O;BLoJ7dV!Pkpqc(PQ#GZY`HHePAHL;xnMIaF1%OtLY87G7!KJbmDO`9 zPI*kd2+yc2rg4e|`obUjU|MBv4=M8f`DUarSN&DsIjR4J+t>4&^rk9cBd9v(zaEQ{7!no>r zKczTSRRStP`3X>*WlbYOBcIV&AXP}k&NMkv$4}(4(q6E@0&x!%IkIG*VX+)KAl_nF zJ_tEZ7UOC!N@zfri>fa;4=IjT>$spSh`tA%3uKC;fJ;P9rJ0qjI4#=N(6*eeEb}>C z-Uh#GVh=LOesBJ;_uUg{k=UK4INEcMBkBltPU~ORPx`$dyMtlRv7CCZ@0<)rgPwI* zce?eV)gM`Xr#o;h9}_xbK6j5;3<2w-o?TaM>)Jj0@VNdA{5ajAH5eQp0#tjC4@NJo zLDwD7Igg>8p#@{N`??Fl&8YCHdyly8?Oo==@o0NX%A4~Gp)SiJe6a&R6B#-5pOH6o zgtqjx)%ynhYgFE`!QA%WV6Uz0+xqrDfd9%oHVV+18KX^dnrXR^@9~YXxwuoCE3UoCjvuK}hRTso+*@kZB{s(Yl!esye literal 0 HcmV?d00001 diff --git a/Checkout_1095834454/migrations/__pycache__/0002_alter_articulo_producto.cpython-38.pyc b/Checkout_1095834454/migrations/__pycache__/0002_alter_articulo_producto.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ffb1cf9760ce730a21a4339bd35f2bfc0ad389f4 GIT binary patch literal 881 zcmZuvOK;Oa5cVsMV_FFnsR+Tr*BpqFv_-T+sFv*_i#9<{0+MBEWxPvRV|#-ih;oH% zPy7o04d=ab;x8can01=A2S(cQ&bPBO-tU{m_O>a3eLeQ$ks?VyL~zqI2##S@18`Wv zawg?+DCbJ3$RbuUHPoI-SjE~G32Q`7JD=6CgO!=o@BD;2QeWX_PM2j|Q&v=5&lx6J zHA%$TO*0@khE*MbBT^`1DO9kGm8BA@L`yrO2hr0m?hqsGrFv?nx3G@87b-R`)TJD5 z;U07~dGBn~4tn=qlnggX%_@F(I2?{q+|&$>hvU)kaP$a`4#p$My5qbh$vf862;hUq zd;9wb`+N)XM~D`*rg0V;aaq%($rv|QmnG+)cCM-qHeg@nTG3<~@38{GQ%Oy@QZsqz*;wD0n*JK3tTL`^x;!Na<2$K~lFewsBsuI+axM^oK zDNjU|Qf+|~RuZ}_o|AK~<1{Xoj4SvxH`+e|1$fu7XO8W9++-_qsmeF0ybrfq_v^cJ z6fG)JR#Do-#bGoph+EPR#Cm8gCjLt=nE9^lTK>dc%;te_pIWYG&FsnCp158R*-4B^ zP7@ZL(Fz(`bKkK9-;v`xr&DVW>bTy_4ua_^gyQb>Wd6zyyeJ?mR?(W3lvR=U(MwpK zlQJREf7FStXDV9jDwseUkMOOZ3x+cR{-u@duTPxMMeM7mPI5bC2)K=ZxpgrYXTn-GTo{k)&V3xw|xQ4q<0)Fj&HJ zEG6vt>R1tM- zLPP`Wc=JLQDC9PA17>OR`tf=Qn5cfjC@zAWX8cj7)9E3<$SLY|dfm=J_bKY`_qq`E zpnpb!546Y;!28d4_xASp_)Zlc=Y%1jhD7m?yq(MkB2GUF1w8cjqiDpbKfg{RDxJ=)W zb6&%dpDrm^@F_RSfk94gOx+n8&4)u?cl?}`x!j~HaxM1{i9Lo&rMdjsf8otD!ZI%^ z{Pe&Zr^I35Ct^LZ=A*$|cQPF~wqp%O&U`wX4D6xhxYpDj&FqomPCPsCF-gLJddFb~ z&8^v>Zwbk~{-8e`Tf0!lai{iVG9H2}a>qxrclN~fCS*l3ppJz!^V}~kP?!)F5br+% zd$*U>1F3iKUX5M{^}4&y+N*OWevA#+*$x;(Rb=I_R?}p7$`7wJy*im!+GQEps_}Y7 tU>l#7Y*!3#-+=Avzi6+iW!r)`(dCxG>SO`NjhB_KuY^#U2)id6>OZ9?7eD|2 literal 0 HcmV?d00001 diff --git a/Checkout_1095834454/migrations/__pycache__/__init__.cpython-38.pyc b/Checkout_1095834454/migrations/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0d238714f43859035efffa3c08c70edd97fcbf81 GIT binary patch literal 279 zcmYk1&q~BF5XQUUL4u^^(*1OW-(kvhl7YdtFn`sc+Y%l|KaC@oI?||5AZm3 z!w$+pQ*T~0Iz^4(w@g-?Vv4w+O;t;d3q%>Ju&A-1OafM2udPuIZcH$4Ks6_5wOB2I za8i_L9rsXHVJXWZ#xz@A*LPSlkb3We8J#yS0DEQ1S*yL$KpwPua?{u@7rV`No#&ez hthx8y7!L$!TQiukZO`^^pNALL_0zMyOkaIRXTKulN-zKb literal 0 HcmV?d00001 diff --git a/Checkout_1095834454/models.py b/Checkout_1095834454/models.py new file mode 100644 index 0000000..1824836 --- /dev/null +++ b/Checkout_1095834454/models.py @@ -0,0 +1,47 @@ +from django.db import models +from Productos.models import * + +# Create your models here. +class CarritoCompras(models.Model): + usuario = models.CharField(max_length=100) + fecha = models.DateField(auto_now_add=True) + dcto = models.FloatField(default=0) + cantMinima = models.IntegerField(default=0) + pagado = models.BooleanField(default=False) + + def __str__(self): + return f"{self.usuario} - {self.fecha}" + + def total(self): + + pass + + def numArticulos(self): + pass + +class Articulo(models.Model): + carrito = models.ForeignKey(CarritoCompras, on_delete=models.CASCADE) + producto = models.ForeignKey(Producto, on_delete=models.SET_NULL, null=True) + cantidad = models.IntegerField(default=0) + + def __str__(self): + return f"{self.carrito.__str__()} / {self.producto.nombre}" + + def subtotal(self): + subtotal = 0 + subtotal += self.producto.precio * self.cantidad + return subtotal + +class InfoEnvio(models.Model): + carrito = models.ForeignKey(CarritoCompras, on_delete=models.CASCADE) + nombre = models.CharField(max_length=100) + apellido = models.CharField(max_length=100) + direccion = models.CharField(max_length=100) + 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__() + + \ No newline at end of file diff --git a/Checkout_1095834454/serializers.py b/Checkout_1095834454/serializers.py new file mode 100644 index 0000000..acfb43d --- /dev/null +++ b/Checkout_1095834454/serializers.py @@ -0,0 +1,19 @@ +from django.core import exceptions +from rest_framework import serializers +# from Checkout_1095834454.models import * +from .models import * # Funciona para importar dentro de la misma aplicación (Checkout...) + +class CarritoComprasSerial(serializers.ModelSerializer): + class Meta: + model = CarritoCompras + fields = "__all__" + +class ArticuloSerial(serializers.ModelSerializer): + class Meta: + model = Articulo + fields = "__all__" + +class InfoEnvioSerial(serializers.ModelSerializer): + class Meta: + model = InfoEnvio + fields = "__all__" diff --git a/Checkout_1095834454/tests.py b/Checkout_1095834454/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/Checkout_1095834454/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/Checkout_1095834454/urls.py b/Checkout_1095834454/urls.py new file mode 100644 index 0000000..4213fe8 --- /dev/null +++ b/Checkout_1095834454/urls.py @@ -0,0 +1,15 @@ +# Direcciones de las APIS +from django.urls import path, include + +from rest_framework.routers import DefaultRouter + +from .views import * + +router = DefaultRouter() +router.register('carrito', CarritoAPI, basename="Carrito") +router.register('articulo', ArticuloAPI, basename="Articulo") +router.register('info_envio', InfoEnvioAPI, basename="Info Envio") + +urlpatterns = [ + path('crud/', include(router.urls)) +] diff --git a/Checkout_1095834454/views.py b/Checkout_1095834454/views.py new file mode 100644 index 0000000..e1074e5 --- /dev/null +++ b/Checkout_1095834454/views.py @@ -0,0 +1,105 @@ +from django.shortcuts import render + +# Create your views here. + +# APIS +from django.shortcuts import render +from django.http import HttpResponse +from rest_framework import viewsets +from rest_framework.response import Response + +# Creación de las APIS + +# from Checkout_1095834454.serializers import * +from .serializers import * + +class CarritoAPI(viewsets.ViewSet): + def list(self, request): + # request => Se trata de la petición de usuario => GET, POST, PUT... + carritos = CarritoCompras.objects.all() + carritoSerializador = CarritoComprasSerial(carritos, many=True) + return Response(carritoSerializador.data) + + def create(self, request): + # Crear nuevos elementos en la base de datos + # serializer = CarritoComprasSerial(data=request.data, many=True) + nuevoCarritoSerial = CarritoComprasSerial(data=request.data) + if nuevoCarritoSerial.is_valid(): + nuevoCarritoSerial.save() + return Response({"Exito":True}) + return Response(nuevoCarritoSerial.errors) + + def retrieve(self, request, pk=None): + # Obtener uno o varios objetos de la base de datos + # pk => Llave primaria - método de identificación de nuestros objetos + carrito = CarritoCompras.objects.get(pk=pk) + serializador = CarritoComprasSerial(carrito) + + return Response(serializador.data) + + def partial_update(self, request, pk=None): + # Permite actualizar atributos de los objetos CRUD + carrito = CarritoCompras.objects.get(pk=pk) + carritoS = CarritoComprasSerial(carrito, request.data, partial=True) + if carritoS.is_valid(): + carritoS.save() + return Response({"Actualizado":True}) + return Response(carritoS.errors) + + def update(self, request): + # Permite actualizar TODOS los argumentos en la base de datos + carrito = CarritoCompras.objects.get(pk=pk) + carritoS = CarritoComprasSerial(carrito, request.data, partial=True) + if carritoS.is_valid(): + carritoS.save() + return Response({"Actualizado":True}) + return Response(carritoS.errors) + + def destroy(self, request, pk=None): + # Permite borrar un objeto de la base de datos + carrito = CarritoCompras.objects.get(pk=pk) + carrito.delet() + return Response({"Delete":True}) + + + +class ArticuloAPI(viewsets.ViewSet): + def list(self, request): + articulos = Articulo.objects.all() + articulosSerializador = ArticuloSerial(articulos, many=True) + + return Response(articulosSerializador.data) + + def create(self, request): + nuevoArticuloSerial = ArticuloSerial(data=request.data) + if nuevoArticuloSerial.is_valid(): + nuevoArticuloSerial.save() + return Response({"Exito":True}) + + return Response(nuevoArticuloSerial.errors) + + def retrieve(self, request, pk=None): + articulo = Articulo.objects.get(pk=pk) + serializador = ArticuloSerial(articulo) + + return Response(serializador.data) + +class InfoEnvioAPI(viewsets.ViewSet): + def list(self, request): + informacionEnvio = InfoEnvio.objects.all() + informacionSerializador = InfoEnvioSerial(informacionEnvio, many=True) + + return Response(informacionSerializador.data) + + def create(self, request): + nuevoInformacionSerial = InfoEnvioSerial(data=request.data) + if nuevoInformacionSerial.is_valid(): + nuevoInformacionSerial.save() + return Response({"Exito":True}) + return Response(nuevoInformacionSerial.errors) + + def retrieve(self, request, pk=None): + infoEnvio = InfoEnvio.objects.get(pk=pk) + serializador = InfoEnvioSerial(infoEnvio) + + return Response(serializador.data) diff --git a/ExEcommerce/__pycache__/__init__.cpython-38.pyc b/ExEcommerce/__pycache__/__init__.cpython-38.pyc index 4fdba204918c1ca8eaa7181e7bddaca80bd88b80..d1c620e24ea16393d000c89b5a4e62605d94d25a 100644 GIT binary patch delta 158 zcmbQr*uume%FD~e00fIoJSTG7)UR~5iU}=FEh>)5DoxC@jPcJ)bt%d$OI6TS2=(&} za}5giba8Z1@bq&D4GszNbo5bhaa9O*^b2wHb8!udaZFB3NzKhn&X4iUEY8f&QwZ^N zRxmO!GK_KdboTLAFb10A;u`E26y)y%%FD~e00cW7Tqkndh+8>Z#e^2878S>2l_ut;#JHpuXP4v`Ogw8201Lhj AEC2ui diff --git a/ExEcommerce/__pycache__/settings.cpython-38.pyc b/ExEcommerce/__pycache__/settings.cpython-38.pyc index 88da244e088a5699252a46eb180515cbdd4ad1f5..becef21f4b1b3c0bb169ce6745dab163ef342f2f 100644 GIT binary patch delta 394 zcmYj}J5R!37=_zfG$7yw@P?PqyNDVTNWeJQwAD1>lC+@7mnMdAn)+d+hJve`&W4pi zM`wP5|G*#M;^=7NY+>>w&q+?s`=0N}Pc&H#g#w(XVos~QhdAzQ5dLe>o_e^S&q?h8 zVLLzrn7|~aY=QA~9Mgy(iWp`vi#dCY1~E@VSg<*Wh+`2;SjLJiG9IKS+B^+ol}=y{ z>lWV-UM8(kY`hBC>NQxmtnQda<}#;ADw<4=Qb&iTtjUEk yNqakrYDl_XE_iY9TRy8?O1f(5)}7;yv9{Ae&XYWUoqT$^5YNhUu8c4 delta 257 zcmew?@>*Csl$V!_0SIEP7z5FO%Y2GPiK$fNs)-+O_5AzNMT8lN|8>HNs&#FOJ~VsOp%|%lFk^# zm!c5GpQ4zel**XJv_K%0Ek$`DQ;NzQkZFP`swrwfm8vP~U{V82YGyK~vqTA{XhjL9 zNNPukq_9MZ0K&BNu)3ZGid5==3}&B+8ob(kyYHv*(xTqIJKxaCaW|tFD1q$ dwK%&ZzhLqBk@rGGGI89DumkW1_aXSSoW0TPjNmdoyD*Q#x}L zdkRM|gC^(19Cwu}-sFtbq%i`g|at^Dqi9^DqM8UjPf}M{WQB delta 109 zcmZo*xy7U%%FD~e00hPEu8Dhq^kWbQ8L$F54nSONGf~@|E1fBdJ%ufpL6d!Ah5N)8 uq2gxFRxzQ)sYS&xS*3}2DKRdo#n~nK1(Odm>ho{_wec_tF!M0-`~v`CR2O#u diff --git a/ExEcommerce/__pycache__/wsgi.cpython-38.pyc b/ExEcommerce/__pycache__/wsgi.cpython-38.pyc index bdd487de9d32b5a6d6e9c5520e94a343c7d94a20..e01d99cbe39974720b80db7fd5cc7ae2074fb98d 100644 GIT binary patch delta 160 zcmdnMGM|+@l$V!_0SFeGcy8pr%vitF*(xTqIJKxaCaW|t&oah8FV&?evn*9XS0U8T zGt4z8*we+)MZwe0B{VoB$kWkB!NpY}*wHV<(a*&-D8?~4F(oxOGdVxTH?uf1KTjdV z(^+cp4?il166O>wzU(B9al3$dWUp)CM Gqcs2o)-d(} delta 48 zcmbQwx`Bl|l$V!_0SIIlU16SmlETWTAW>yUobg^$r=DW CpbonL diff --git a/ExEcommerce/settings.py b/ExEcommerce/settings.py index 274e968..05a57db 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_1095834454' ] REST_FRAMEWORK = { diff --git a/ExEcommerce/urls.py b/ExEcommerce/urls.py index a28b9fb..75fe364 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_1095834454.urls')) ] diff --git a/Productos/__pycache__/__init__.cpython-38.pyc b/Productos/__pycache__/__init__.cpython-38.pyc index 12858eb03c6a3edcf405c69aa3b3a30d8cac3091..6ab547f0e6f30ba100020a2806b8d662c0bf0ab4 100644 GIT binary patch delta 158 zcmbQt*u=yg%FD~e00fIoJSTG7)Gv3oiU}=FEh>)5DoxC@jPcJ)bt%d$OI6TS2=(&} za}5giba8Z1@bq&D4GszNbo5bhaa9O*^b2wHb8!udaZFB3NzKhn&X4iUEY8f&QwZ^N zRxmO!GK_KdboTLAFb10A;u`E26y)y%2l_ut;#JHpuXP4v`Ogw7}01DI& ABme*a diff --git a/Productos/__pycache__/admin.cpython-38.pyc b/Productos/__pycache__/admin.cpython-38.pyc index 5e45772cd198c8e54b8684dfc45553622f334209..a8c95cbc538a809538d1fcc762ec52eb919f7811 100644 GIT binary patch delta 159 zcmX@iw27HJl$V!_0SFeGcuwSgUcbcIDkiizwWv5It28msGR8kI)ukx2ELA~QA=J+^ z%rz+3)5Xz6!PCzrG&m&4)6qx4#Z@8L(J#c&&&4$;#xXfDB{erQIX}iXvp6$9Pa(w9 zS;5G_$S}s))7i&g!5C{b5kPFi5?-mm77~~oglvS5Z-Mnw6#SaVXr+{w0coQ8j>i1nn;o=goO~ZYe{Lcakmvc>znlCE9L6R zSMcO)E42gj&3rpQyE8lK^*RV-b>^mzV81lkl_ro8s3HIiF+4{Fjxk0zh&7n;ftbPZ zyAd~7GerHpZ^%M@T(`}tvPAimPcwb8D;UTKR2>3v6k~><8pj4}KnJ5fxRZh{vxQKb z26cOT;PsnzD@n?<;7L+iR;;uFbZ6AOl*gQrWcu>?F7`!QpSrs6ZAG$xhP5GT4Z=U zJfW6rjeT+oeQYN*gTNmH)wTY0^k4=K4R|F~z7R4OiaM`OCW?Z~jMME@G_5K%sNSRj t&(-@@4S*J2a}PGM&t_>k6$70ob!;8^pKjynf2>=Vo0VMYEwB4@jb98+ct8LE literal 0 HcmV?d00001 diff --git a/Productos/__pycache__/models.cpython-38.pyc b/Productos/__pycache__/models.cpython-38.pyc index 39e54e58bb205bdcd78380bbee851f6f876981af..529e735297b33556c7aa6ca1481a767fa01fa59b 100644 GIT binary patch delta 161 zcmaDXa7mCml$V!_0SFeGcy8qOVys{4Y!wq)oLW>IlU16SXBp$4m+DfKS(d7xs}Snv z8Ri-k?CIj@qTuQ05*i#58xO6U}PBM?CI>|uV4%`$Hg_+F(}C22gn8K^>+&icMNik2}&)IlU16SXBp$4m+DfKS(d7xs}Snv z8Ri-k?CIj@qTuQ05*i#58xO6U}PBM?CI>|uV4%`$Hg_+F(}C22gn8K^>+&icMNik2}&) delta 49 zcmaFI^`DbFl$V!_0SIOWx^CpIWE8h{wu%WYPAw{q$tq3EONntwEzT~IlU16SXBp$4m+DfKS(d7xs}Snv z8Ri-k?CIj@qTuQ05*i#58xO6U}PBM?CI>|uV4%`$Hg_+F(}C22gn8K^>+&icMNik2}&)JEzl diff --git a/Productos/__pycache__/views.cpython-38.pyc b/Productos/__pycache__/views.cpython-38.pyc index a696ef13b815579fd917034e1725e5d68245da66..70148b9cc8774d0596ac3981604cf87298e7fa09 100644 GIT binary patch delta 161 zcmX@Zy_<(Sl$V!_0SFeGcy8pLz*xV;*(xTqIJKxaCaW|t&oah8FV&?evn*9XS0U8T zGt4z8*we+)MZwe0B{VoB$kWkB!NpY}*wHV<(a*&-D8?~4F(oxOGdVxTH?uf1KTjdV z(^+cp4?il166O>wzU(B9al3$dWU%Yt} HqZA7OI@>U~ delta 49 zcmdnZbB3Ecl$V!_0SGpRxNhX0z$k9&Y!wq)oLW>IlU16SmlETWTAW>yU$9w`Ns0vk DQ6>(F diff --git a/Productos/migrations/__pycache__/0001_initial.cpython-38.pyc b/Productos/migrations/__pycache__/0001_initial.cpython-38.pyc index a8fb1622380f84374a496796114a6a91ff256b30..fb7d07ad0fa2b3778d700a63c48312afafdc9ce7 100644 GIT binary patch delta 160 zcmdnZwThcNl$V!_0SFeGcy8o2V5#5cY!wq)oLW>IlU16SXBp$4m+DfKS(d7xs}Snv z8Ri-k?CIj@qTuQ05*i#58xO6U}PBM?CI>|uV4%`$Hg_+F(}C22gn8K^>+&icMNik2}&)IlU16SXBp$4m+DfKS(d7xs}Snv z8Ri-k?CIj@qTuQ05*i#58xO6U}PBM?CI>|uV4%`$Hg_+F(}C22gn8K^>+&icMNik2}&) delta 48 zcmey&+QP~m%FD~e00cW7TsLxWW)u%{wu%WYPAw{q$tq3EONntwEzT~pIM C?GH2n diff --git a/Productos/migrations/__pycache__/__init__.cpython-38.pyc b/Productos/migrations/__pycache__/__init__.cpython-38.pyc index fb60fc54f78c83575a512b98fe25505105da2d93..1bbb345675b001c25699dcbdf67380f61e42046d 100644 GIT binary patch delta 158 zcmbQo*vrHn%FD~e00fIoJSTG7)NgXOiU}=FEh>)5DoxC@jPcJ)bt%d$OI6TS2=(&} za}5giba8Z1@bq&D4GszNbo5bhaa9O*^b2wHb8!udaZFB3NzKhn&X4iUEY8f&QwZ^N zRxmO!GK_KdboTLAFb10A;u`E26y)y%2l_ut;#JHpuXP4v`Og!rV01w*^ APyhe` diff --git a/db.sqlite3 b/db.sqlite3 deleted file mode 100644 index 65d1360ab65e3341196663233d13fa26c78092c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 155648 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 Date: Fri, 24 Sep 2021 21:46:22 -0500 Subject: [PATCH 2/2] Fix #32 Creacion de aplicacion de checkout --- ExEcommerce/__pycache__/__init__.cpython-38.pyc | Bin 260 -> 0 bytes ExEcommerce/__pycache__/settings.cpython-38.pyc | Bin 2675 -> 0 bytes ExEcommerce/__pycache__/urls.cpython-38.pyc | Bin 512 -> 0 bytes ExEcommerce/__pycache__/wsgi.cpython-38.pyc | Bin 671 -> 0 bytes Productos/__pycache__/__init__.cpython-38.pyc | Bin 258 -> 0 bytes Productos/__pycache__/admin.cpython-38.pyc | Bin 434 -> 0 bytes Productos/__pycache__/apps.cpython-38.pyc | Bin 484 -> 0 bytes Productos/__pycache__/models.cpython-38.pyc | Bin 2258 -> 0 bytes Productos/__pycache__/serializers.cpython-38.pyc | Bin 1390 -> 0 bytes Productos/__pycache__/urls.cpython-38.pyc | Bin 625 -> 0 bytes Productos/__pycache__/views.cpython-38.pyc | Bin 1595 -> 0 bytes 11 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 ExEcommerce/__pycache__/__init__.cpython-38.pyc delete mode 100644 ExEcommerce/__pycache__/settings.cpython-38.pyc delete mode 100644 ExEcommerce/__pycache__/urls.cpython-38.pyc delete mode 100644 ExEcommerce/__pycache__/wsgi.cpython-38.pyc delete mode 100644 Productos/__pycache__/__init__.cpython-38.pyc delete mode 100644 Productos/__pycache__/admin.cpython-38.pyc delete mode 100644 Productos/__pycache__/apps.cpython-38.pyc delete mode 100644 Productos/__pycache__/models.cpython-38.pyc delete mode 100644 Productos/__pycache__/serializers.cpython-38.pyc delete mode 100644 Productos/__pycache__/urls.cpython-38.pyc delete mode 100644 Productos/__pycache__/views.cpython-38.pyc diff --git a/ExEcommerce/__pycache__/__init__.cpython-38.pyc b/ExEcommerce/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index d1c620e24ea16393d000c89b5a4e62605d94d25a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 260 zcmY+9!HU8#5QZaokcGZOt{#+K*NY-zXtEHfDI~340;RM$L~J98iaw90zLM8{1aEuV z4BU3``zHAHeH2rDdqU0k7)$u<~|&j~WOt?6D5mFn;2%i{~Wq50vba(G;U}0EV_s$&?P%XlKKU78BL-q=qkE~uA?bCt&gD_dJf&R6Np2%&~5Yu zx`Xc897!VnEoUe7arC8r5q*Wej_pt25p?fe3Vri7Lc4_SqX!^)A3coMe7rs)Nt@Fz zqiKB-J=U*)cUR%Q2KRL|qfeofn#c?0Y%-C^O53JmyFA5=5yz(dmh18IzHGVeHufyc zcRY6+TTIAiSFwXVlVQYf9`FxPtT$t#HgR~$Opo;>AMic}B)$i{Aj}F&puGaPZP&v* zalk~|WW;rN__8Jeqojo&gAX{{WUND<7YfL=sL-`>=mEG?z)k@G3(V~hixv)@E_C5p z6Z2bstHrknWxTs}9F*xGFocQ6@0u+i)Bj`3!&`lZ{)ECvD8c;x(@mcmbblc@cs3mb zKX=@@*}QGfAF?R<$`ed<*tsU2A#@y_)Crb;9i%%ByJCeL2*2|h9*0oo%qLqrG zR;nsSu`H^ptOj#uz(G*Nii<&5HYu@0FmX%^7XDpD?M6PJG}DW=O%Q6~J=4Pi#g^|8 zb|9#|P34FeEDk28mrkKizh|gVD}UNZ)HALl6yu-&5T)LhP=sZj;JrT4ZwGvdGT!gU z$w>PY2ZK0#_5I3~ZaMU6Jv}3c7O{4=O=|~wSom=zs)cGNYF65(H_NkPtQj0z2rii3KU17g~=^^~-Td?=u71+XBa2j|LA1K~BpE2ygm!@aP`~iAIXwe8%5|_XAbga^GZYSac`i&Zi^bQnBI%q|s;OZ{Tw62ZUAnp!^?(}O z?oZhswTWPMI*{wQ_QN#7Tc+P)N1ci`k26T$vnyIq9NontdcfqnNfGFcO_gecyV5&3UNr=Z59ihIHp^Pi$76t(=LJxFIH!np8eteaGd|Ua>RK_#6ySt{K~u=z2-AiEhl^o^ zDVK&^$7D^&KJgqV^e}C1(wLGljA%LVOEukHCZ!W%Rhy~lDu4B4Rd0- zT-}f*<5gAF)Ns6{s2Y%f00p4x<26~;jFlR^pp9znb(pP`B&jTKh&4GJt5vI-QLmMY zRb?d{)#S=rS=3}ToY+uTOObxLH$Ove+a*poDv6pHIirSC(SSA9V5$PFWUPzj5-_V! zc)7Butk%U<*(g>e8DL8l+0d&{CYd^fQJPy)y1Vk+tP+kyG);%dG?>)I$eZ^G?=F;5 zy!`#X_`DI73T(b+F`-UCht$b)~c}*Ho}8@g+s7t6HrjmU&6$RZ-DIMUra` z(J~Qk6U%K>NOVB)V1u8Zou6wIOT}`PUjQ6QR>fMa3TcdWt1DWRokk6JTuPYh5tlal zI_Jdx@c0)x2Vv&BHk@KD`~v>dBT~KN_nDjE(h+U!6YO)T1W>tC>j!QUY<91ae*j4;hiL!+ diff --git a/ExEcommerce/__pycache__/urls.cpython-38.pyc b/ExEcommerce/__pycache__/urls.cpython-38.pyc deleted file mode 100644 index f7ffe362c4ef13885cb0c471f2e81d35f1723d56..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 512 zcmY*WO-t-B6m8nhhaV#@U3NQ*H-3%qe27@viiNQw?aX^n3R07x8QZ2Lt>|q1AMRZE zm%4o`|AHWRGb-o}xjEBypFTKDtt&f^kN^(~8^~NmI z>bmK$0%tX$^Y%jDoUfIFlNwiCZl)yze*VP=waDbWhp#EV;dS*<-f%wY#rD?z-tXPv zaBsM14Eo)8jm*;GiVrX^D#0#=4i=h~Pf<-11}MT*vME_b8&j#x3S@9sQBlZeO)RM< zm0q8mKgm>5A(L617W>J#psrxI)cR#j1OKlVM!svimLIs&XcGGN$Z|a^vV(~oxL%mp zI3+Y^m?vjUGG15{-?4VKcD578cSd7t7v{KLWQXB+1XSG}pG^MQp_hcTg*Io*_m~84fJ*Q%Mt04qpyZSoln~Am>97(IDYtP-o#@c<(w_(5-oU*ygM)F zWeIf-sH*uIa%q{SFA>~TT!27w1!y0HivoWv0AYbJDmmE{a8|$;3be&F-MJVpfuQ*u zS5-lCEGcL6x#GK0nMz&*qD&<%cMimvBBuf^XaO&f05DflR^rmO3D1Q^)|f5%KTS%c z4a~l53^`eLvHW31AR+8QJGO#S!93t+fBwNwv@gTmES0BNf zr%q1#!~YHc4>K^$a=9R=_eS5YDEp#?p!hA0XEX7Oh^CB8FszKush+3S}=bJCrR+w(O>&Z=>kN2k>Qb z_2esfa#}2OV88voVP^K5P5b?>f$@IsXJ2@Kuf%q=P+a5DV+3w+QWzzf60+iEVI~HU zdF!14bV6%uk346NxspJ&xf4s%)6N<1nPtELBc zO7dl1OFb+lhe9`PEox{i1v8;*P|aZ?7Lpc_*H|e_(6z{AV{Q7Hu8Ya4&Xka!hT6lS zYxwV0B2VNQ{k?%}wkJ_;lBu?Pbh&g%2 zp~R=ytS5Z-Mnw6#SaVXr+{w0coQ8j>i1nn;o=goO~ZYe{Lcakmvc>znlCE9L6R zSMcO)E42gj&3rpQyE8lK^*RV-b>^mzV81lkl_ro8s3HIiF+4{Fjxk0zh&7n;ftbPZ zyAd~7GerHpZ^%M@T(`}tvPAimPcwb8D;UTKR2>3v6k~><8pj4}KnJ5fxRZh{vxQKb z26cOT;PsnzD@n?<;7L+iR;;uFbZ6AOl*gQrWcu>?F7`!QpSrs6ZAG$xhP5GT4Z=U zJfW6rjeT+oeQYN*gTNmH)wTY0^k4=K4R|F~z7R4OiaM`OCW?Z~jMME@G_5K%sNSRj t&(-@@4S*J2a}PGM&t_>k6$70ob!;8^pKjynf2>=Vo0VMYEwB4@jb98+ct8LE diff --git a/Productos/__pycache__/models.cpython-38.pyc b/Productos/__pycache__/models.cpython-38.pyc deleted file mode 100644 index 529e735297b33556c7aa6ca1481a767fa01fa59b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2258 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