From ef8b2c05412348356b24de37b43c62bc448b9441 Mon Sep 17 00:00:00 2001 From: gaperezmo Date: Wed, 22 Sep 2021 18:37:24 -0500 Subject: [PATCH 1/2] Actualizacion taller 2 --- .../__pycache__/__init__.cpython-38.pyc | Bin 149 -> 194 bytes .../__pycache__/settings.cpython-38.pyc | Bin 2539 -> 2607 bytes ExEcommerce/__pycache__/urls.cpython-38.pyc | Bin 346 -> 444 bytes ExEcommerce/__pycache__/wsgi.cpython-38.pyc | Bin 560 -> 605 bytes ExEcommerce/settings.py | 2 +- ExEcommerce/urls.py | 3 +- Productos/__pycache__/__init__.cpython-38.pyc | Bin 147 -> 192 bytes Productos/__pycache__/admin.cpython-38.pyc | Bin 323 -> 368 bytes Productos/__pycache__/apps.cpython-38.pyc | Bin 0 -> 418 bytes Productos/__pycache__/models.cpython-38.pyc | Bin 2147 -> 2192 bytes .../__pycache__/serializers.cpython-38.pyc | Bin 1279 -> 1324 bytes Productos/__pycache__/urls.cpython-38.pyc | Bin 514 -> 559 bytes Productos/__pycache__/views.cpython-38.pyc | Bin 1484 -> 1529 bytes .../__pycache__/0001_initial.cpython-38.pyc | Bin 1339 -> 1384 bytes .../0002_auto_20210916_1521.cpython-38.pyc | Bin 644 -> 689 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 158 -> 203 bytes checkout_80159226/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 200 bytes .../__pycache__/admin.cpython-38.pyc | Bin 0 -> 364 bytes .../__pycache__/apps.cpython-38.pyc | Bin 0 -> 498 bytes .../__pycache__/models.cpython-38.pyc | Bin 0 -> 2382 bytes .../__pycache__/serializers.cpython-38.pyc | Bin 0 -> 1258 bytes .../__pycache__/urls.cpython-38.pyc | Bin 0 -> 516 bytes .../__pycache__/views.cpython-38.pyc | Bin 0 -> 2941 bytes checkout_80159226/admin.py | 6 ++ checkout_80159226/apps.py | 6 ++ checkout_80159226/migrations/0001_initial.py | 49 ++++++++++++ checkout_80159226/migrations/__init__.py | 0 .../__pycache__/0001_initial.cpython-38.pyc | Bin 0 -> 1508 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 211 bytes checkout_80159226/models.py | 57 ++++++++++++++ checkout_80159226/serializers.py | 18 +++++ checkout_80159226/tests.py | 3 + checkout_80159226/urls.py | 13 ++++ checkout_80159226/views.py | 73 ++++++++++++++++++ db.sqlite3 | Bin 155648 -> 192512 bytes 36 files changed, 228 insertions(+), 2 deletions(-) create mode 100644 Productos/__pycache__/apps.cpython-38.pyc create mode 100644 checkout_80159226/__init__.py create mode 100644 checkout_80159226/__pycache__/__init__.cpython-38.pyc create mode 100644 checkout_80159226/__pycache__/admin.cpython-38.pyc create mode 100644 checkout_80159226/__pycache__/apps.cpython-38.pyc create mode 100644 checkout_80159226/__pycache__/models.cpython-38.pyc create mode 100644 checkout_80159226/__pycache__/serializers.cpython-38.pyc create mode 100644 checkout_80159226/__pycache__/urls.cpython-38.pyc create mode 100644 checkout_80159226/__pycache__/views.cpython-38.pyc create mode 100644 checkout_80159226/admin.py create mode 100644 checkout_80159226/apps.py create mode 100644 checkout_80159226/migrations/0001_initial.py create mode 100644 checkout_80159226/migrations/__init__.py create mode 100644 checkout_80159226/migrations/__pycache__/0001_initial.cpython-38.pyc create mode 100644 checkout_80159226/migrations/__pycache__/__init__.cpython-38.pyc create mode 100644 checkout_80159226/models.py create mode 100644 checkout_80159226/serializers.py create mode 100644 checkout_80159226/tests.py create mode 100644 checkout_80159226/urls.py create mode 100644 checkout_80159226/views.py diff --git a/ExEcommerce/__pycache__/__init__.cpython-38.pyc b/ExEcommerce/__pycache__/__init__.cpython-38.pyc index 4fdba204918c1ca8eaa7181e7bddaca80bd88b80..ea1f8984ded402bb18c3f1a64b475f76d12ba30e 100644 GIT binary patch delta 91 zcmbQrc!-fZl$V!_0SLJBye4wnxTHH<#e^2878S=N=A{&+#<=7sm*%GCl@!M~hXw`v tE4a8S1O)lJ2RZsWI(z#2DfoK&g?Kv0ggE;6xCR+{xj6c{`%jEB2LPV;8pQwr delta 46 zcmX@aIF*q*l$V!_0SI)5DoxBwiE&9S&MwI>nAmL&02VP0 ACjbBd diff --git a/ExEcommerce/__pycache__/settings.cpython-38.pyc b/ExEcommerce/__pycache__/settings.cpython-38.pyc index 88da244e088a5699252a46eb180515cbdd4ad1f5..123bd38f2d322fff47d8fbf9924082652e627e30 100644 GIT binary patch delta 321 zcmaDYyk0~*l$V!_0SK5%yb|~DGB7*_agYH>)&Yo%?@iS9tWV)f=ZfM=;ZG4r5lm;w zWQ^iY5lRtG5lInE5lazIkw|Bc;z^N=;!TlCXGmd5kxr3Gkxh|HkxysIWK2<*!;;Pz z#h0QO#h;>-qMXW@#k4>ml`TbOAybO#9FS>(DQYR|K$U7K8emcrOloB^rn5u|rD#V< z3#aHriKMVZi2|`05R0eiMoFYF1v6;sZRTOLVG$Hz6u$jimi&)t8r0jDuz+vF5Z1xAL+&72tky@pQ) delta 253 zcmZ24@>*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+8oP#kyYHv*(xTqIJKxaCaW|tFD1q$ ZwK%&ZzhH6^r!iy8v@#i>Qb zF^PF8MX50^`N^fZsd**EG0veu!Tt&^t_lG`{_a7JzK+hG{(cI+o_-;o&M_g5K0dBN bMqVzCe(wI0Bk@rGGGOA9DumkW}>z^S2|M^dkR}HgC_gL3ipZ6 uLdDITtztrpQ;UjYvPu*4Qes?Ei?d7e3ntey>ho{_wec_tF!M0-`~v`W-WO~D diff --git a/ExEcommerce/__pycache__/wsgi.cpython-38.pyc b/ExEcommerce/__pycache__/wsgi.cpython-38.pyc index bdd487de9d32b5a6d6e9c5520e94a343c7d94a20..cd51d7ddec65458a5563c1a22d7964f606e84308 100644 GIT binary patch delta 93 zcmdnMa+ifWl$V!_0SLJByf$)QW^_q*wu%WYPAw{qNz6+rN{w;JPcF?(%_}L6aSja% v_E&ImRR{?3cMo#(b#(Uh_fzoo^b7HHjtOz}@o^0@@^W$XbN8S8mC+gi32_`# delta 48 zcmcc1vVny=l$V!_0SIIlU16SmlETWTAW>yUocsT$r=Dh COAfXG diff --git a/ExEcommerce/settings.py b/ExEcommerce/settings.py index 274e968..06366bd 100644 --- a/ExEcommerce/settings.py +++ b/ExEcommerce/settings.py @@ -39,7 +39,7 @@ 'django.contrib.staticfiles', 'Productos', 'rest_framework', - 'rest_framework.authtoken' + 'rest_framework.authtoken','checkout_80159226', ] REST_FRAMEWORK = { diff --git a/ExEcommerce/urls.py b/ExEcommerce/urls.py index a28b9fb..4cee9ed 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_80159226.urls")) ] diff --git a/Productos/__pycache__/__init__.cpython-38.pyc b/Productos/__pycache__/__init__.cpython-38.pyc index 12858eb03c6a3edcf405c69aa3b3a30d8cac3091..0e5e624c2eddfb6f4bb1c332d2db4b3083ca7c01 100644 GIT binary patch delta 91 zcmbQtcz}^Rl$V!_0SLJBye4wnxTHE;#e^2878S=N=A{&+#<=7sm*%GCl@!M~hXw`v tE4a8S1O)lJ2RZsWI(z#2DfoK&g?Kv0ggE;6xCR+{xj6c{`%jEB1pu7?8odAj delta 46 zcmX@WIGK?)5DoxBwiE&9S&MwI>nAmL!02N0L A9{>OV diff --git a/Productos/__pycache__/admin.cpython-38.pyc b/Productos/__pycache__/admin.cpython-38.pyc index 5e45772cd198c8e54b8684dfc45553622f334209..0ed51af53c51bad0df25d862638511947ef9129f 100644 GIT binary patch delta 92 zcmX@i^nr;xl$V!_0SLJBye4u#cS&-#iU}=FEh>&l%u6Xsjd96OF3nBND=Cg~4h;(S uS8#Dv2nh0b4|4Q%boTW3Q}Ffl3-NT0332rCaSbx^a&h!?_n*wkXaxWY5F2^` delta 47 zcmeysbeM@dl$V!_0SIm8GzsPL}zF*110|^k8n()ftjss*z)& literal 0 HcmV?d00001 diff --git a/Productos/__pycache__/models.cpython-38.pyc b/Productos/__pycache__/models.cpython-38.pyc index 39e54e58bb205bdcd78380bbee851f6f876981af..14ec186a9a29c414082e07fa0dcc923fea123950 100644 GIT binary patch delta 94 zcmaDXFhP(zl$V!_0SLJByf$)sF}fr>Tg8MHrxq2*B<7_QrN+4ACzs}?=9Lu3IEMxW w`zyG(Dg*@iy9YV?Iy!s$`ziQ(`h|Ep$Amcg__zicdAT_Hx%+RIlU16SmlETWTAW>yU$FT;qZA7O DU&#-H diff --git a/Productos/migrations/__pycache__/0001_initial.cpython-38.pyc b/Productos/migrations/__pycache__/0001_initial.cpython-38.pyc index a8fb1622380f84374a496796114a6a91ff256b30..5e7c465efdc661050e0eebf498058a36631f3c22 100644 GIT binary patch delta 93 zcmdnZ^@58#l$V!_0SLJByf$(hu(*^sTg8MHrxq2*B<7_QrN+4ACzs}?=9Lu3IEMxW v`zyG(Dg*@iy9YV?Iy!s$`ziQ(`h|Ep$Amcg__zicdAT_Hx%*EJVtEMw>OLFv delta 48 zcmaFCwVR7Ol$V!_0SIpI9 C#}2Rn diff --git a/Productos/migrations/__pycache__/__init__.cpython-38.pyc b/Productos/migrations/__pycache__/__init__.cpython-38.pyc index fb60fc54f78c83575a512b98fe25505105da2d93..4474c1a44576c227655b40e9cb181a8952e0861f 100644 GIT binary patch delta 91 zcmbQoc$$$rl$V!_0SLJBye4wnxD+^B#e^2878S=N=A{&+#<=7sm*%GCl@!M~hXw`v tE4a8S1O)lJ2RZsWI(z#2DfoK&g?Kv0ggE;6xCR+{xj6c{`%jE>005`c8tDK4 delta 46 zcmX@jIFFG#l$V!_0SI)5DoxBwiE&9S&MwI>nAq(A02)pX AO8@`> diff --git a/checkout_80159226/__init__.py b/checkout_80159226/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/checkout_80159226/__pycache__/__init__.cpython-38.pyc b/checkout_80159226/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..43b141aaa0cbb61e845ffa5a6c75b861f86b682e GIT binary patch literal 200 zcmWIL<>g`kf`VeNL=gQLL?8o3AjbiSi&=m~3PUi1CZpdI zlbDxMlp5obpIn-onpaXB;~W|k?62VBst^$5?;hmn>*(z1@2BAF=@;VZ924T`O zDJm7pIFS_f1uhH9wL-xxog`jA^ls8*kosdkh?3YFNAWZY(9|D|!n8Z=`|%(_;d6*Z uQBa8~!VeTbic;U6AD^6Fbh~G0`%`E2V%(m+y3Fa-=0D|HXgDrx*!%^BAz}0Y literal 0 HcmV?d00001 diff --git a/checkout_80159226/__pycache__/apps.cpython-38.pyc b/checkout_80159226/__pycache__/apps.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..44ba71ddfaffc1c4bc5e42c9a86c29669d6d2da2 GIT binary patch literal 498 zcmZWl%SyvQ6rJg$Q2SUY;!emmo1g_nMZ}oK($Xf9wwn+b#>})v^D>iwy49Z%|0r8m z{(>uK+KL4)+%t0@=gyro>vWnxSjLCsL!6&7*fd21m%_O!fC3655JL|_&t&zblVp+V^j42k$|9~`g$tuB((8~#wAv2VH2ll6wR+XSI3Y2^ zxN2f7Xk{etZHymF60Ivcl+8&Q6_|)&c)pyb$l5!|r9eyg4$U)v##zpNlF*#_y)-Ce zmK5AKXYRyNdzO0RI(^p|8|J{V)$zcd4orV)j7FB*9rg^n@A%e}6{K;@@__mO_Vr1Y yaXov^k$6;U&m}aV0+$(ELse_7f$Yp{ayQxgx8>^A61l2zzWVNk)SS!SHu?b;4ShEN literal 0 HcmV?d00001 diff --git a/checkout_80159226/__pycache__/models.cpython-38.pyc b/checkout_80159226/__pycache__/models.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2591090058cd9869be45c74765eaae33a56a202a GIT binary patch literal 2382 zcmaJ@Uvt|;5Z6hvB|D1aq-_dxfG{uv=1*EOK!IVH7{}?PO`J~tyl6}{7u_Y1E9u;m z1Z^gHN?-dCm}wvTP52D=%2U4p4?MAZvK^-_$g`)t)k(Lzzu)e8e|ENR!1ebZ_vi!1 zF#f{H^ku_j6(oBA12Y(jjfD7wpl-%yV)>TVt=LW~euWr!3}&;+Q-f7F8C1_L-vLXN zIbd-{78fiotAV99vea08*J#bWf<25DQPo5+9%rC6j(8pv8JB@JfyKQq1uMc_gt&P6 zvS6|bk}(*#;S*-~CbtGQBg}k8{0it*W-%Ld2XvQJSQYdd==G641G>i?ZJ#Zj^c#GR z)!EEbKI4|B)ba3sWE`8UpI0Bnt2WyY;5*UtfjA(T9$H( zte`Ry%F1%7Du+Bgrr>~`@%ZqiA?M)>|2*vc*x!d7W__A6$@^;}EE1mPS--Qtv%9^t z)?K>4vwdf$z18k)Z1#PuI`A(+VdRYD#()gW zQ=r;2a%P^IYsRn5GwYO`TFs5+8y1NDh&mV>D(@BJ|)JE|S-Acn1b$0jFA~_E_FPE8=_MnyRKn z0zrQW)(n$rpkLQs^Q&CbYb_`@2vVBxAW-!H3#^Dy_k!S2LF4j?M4wfyb4=xW#A7Bs zJzt|aFXs)M*Vkh~b8YZ#2F0nojWp*+ynM;8hcwN%qBKgV@_rE_<}@u=SBLb7G9j+*TuuVm%W7P;$;DHO0;mkEXGWyxBWs-VL;`0#X(uMh01<7IZ}S6O zWs&4z7>U%khcwE3kMSXt4{$5ZgBm_eBtZ`o}a>pKL*LL6kXCB$g^~zJppS1b%3@S_RGx+KrWV!`+Wv4|P>;57U zjW@8ez^Jjp8XaSWJsUeV;&#!qZ$i($fKL-%A7=jvs! zx~j1OO^?JfJ1B{KWi$^(n#<^58P4Bhi7@%i@!yARxjeI^_N%gm|2RsQk#8jn-ojPo W{!})~pRr1{KR{C3GZ$_wc>e;UKmF4H literal 0 HcmV?d00001 diff --git a/checkout_80159226/__pycache__/serializers.cpython-38.pyc b/checkout_80159226/__pycache__/serializers.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1c158be2e74aaa7e00db8fd57ef51cdeefb23633 GIT binary patch literal 1258 zcmbtUOK%e~5VrS`Y~GM^;*@KUs2~yu5JHWTC`#3AP#%|PC2O^I#kRZIU?)6!Ex&_% ze*k~RS5Ey4oS4}pG;IMziY1RcpU2;hzwzv(RLT<=Pro1gKPVwT(b*mrI7cv*3x*R; zBNEdorGy*YjEphq5^iz(8{xK~XXd3jwE)TREFjr6Vgusv93Z(hlHvIgsTZz+lhmm$ zC?P{X3NM6I*N_Eb^htob+rtFs2&Q@rMvy7xWNH96y0-78IY%81!ua4G|g zLsS2r*t=IP-%c?Uz<$~Yg8m+Yl$&x92Fqw4Q4Vf%{8t!f6T5>hsKL&<96&INxzPoEx1QByDb#|U zN@%3di9DD1j&vsN5~VAB?3PsvZq{)6UyfE55@PSNMdBhGSIis{I>L C@bZoT literal 0 HcmV?d00001 diff --git a/checkout_80159226/__pycache__/urls.cpython-38.pyc b/checkout_80159226/__pycache__/urls.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..37f72e55b3f062a7e8f8c093a532c8ce8dc1a9b0 GIT binary patch literal 516 zcmYk2&2G~`6oqFT|K+brH>|S_ivW>8fGULLL{*?oDmU3!mdfC{P2GCz=#EWWwpp;^ zL0Ix0Ji%;P^%dB_bqf+#nxpyd=*~Ga>wdq(sD6BZFTQZbem3xbIRtNM=?^55NuD#s zW3H^&;tgAQOWCna`UMT~XKi@g zmF-hD>fDhF8(GHQit566S&`roQ)r^l-x%&Uu8sW4!q>@K z1L{N+5+RwEX|15BbP}$k)8%kF8=geV!zefo!ufJBJf1IB^DtQjM@O@0@@^U|4wuR7 zW|o#p0j7|o7m!|2^s|>wpFMvynY>7v0OReg@efof>m1%RpQiUn23F7ZxyuK9VD0_> E11B((DF6Tf literal 0 HcmV?d00001 diff --git a/checkout_80159226/__pycache__/views.cpython-38.pyc b/checkout_80159226/__pycache__/views.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..205a8b6e06bd53425a76cc179b7d5d5b517451cb GIT binary patch literal 2941 zcmcImTXWM!6xQk<+c61*OJSx>na&hZnuZMRP^QD+IxY2?a*j<4~aAf;m&K%mi6-T(#dfNX@p54XD7WK z#^W&Ih(($-%tFtUreMjobU1r4Vj}b1DA!ZSnoy(Ty^yB-P~!_Q>+gQ^UT+IJL@(T- zob^`IXf$9undmjQHaqK!tF6V2&Gm=kYBjD7>#@NJ^d~57mV+-BP z@59$r?zVtn3U@x_Gk$C!aSGb{<*1? zb*|v=Cn%Ji5E(~@fIW|*AYay*7%GpTN|9Y)X3VT(QBj|48svL^4!xodLIYE|q+UeG z;%TFmCwc_j-1Z#l2Ek4^U_l@&K`=<^D8YIy2wsfBB=6yuP={+MK11;(im6_zh9S#c z5HnB&Rv=bww^DIbYXl9Y2MzK7ins^jqm)@YqRiPN%B%yCR)IVnMV{wmtpQ$$MoIeL zd6T2^K$vc^q>6Zs_LcRbtuy7xJo3${Gvy41gi?lIfLX_^qzr_HyagqXZ=y(RzE~Lb z|6lluUxqCq=DtRakWcs-fmvdvg(3iv-V6Osg28~e4JBtM6@QAIE))|KppOv~20#;M zFM>EtOb4VyN_v~)H~@j>%ZbQI;=vd^e*?Y$;zjF(0sLCXvnMHyw_~K3vn+w>d>@KHj@N)g<_Z?MR}p4i9%g`$lgL}>&bu#X#sD!{00o> z9*UbN&Y~#1jU5ZxDNlU`9avQ40#8}4Q?V;9$F?@y$Lbsu3br}$;>(mj=ctpsTy9)~ zUv-I8-0ojI(JQhr8wthsa*p=Hou}!Nc$V@k8f8MA6S7()8Qhqp^BdexI}p%Fol23j ZG?(rVIYr+`Yb%Go;hGN)uC|}ZS9R(8n4#{(PzVC=O*}>hD2AGgvQW3(7*umXAMlIPjWvQ!yJ$kt(JR(XS5oT#cALR zngl$GWq!(mh4H{sYwxyA1W&QYp{{968|t793Ft!uh_4S#mYd{N6lP6q(DBPb9;~@J zCSaqj00k({bwnjZMO-gusDh{j8?c$7Ekxxtx`n8MezG+`58HE+MY;XnC_A|OI?A0J z=z|;R?hUki1KqoU?jzb@o0F}HHMup}h7aMRIT;h*Uf<>8_ul0bJa?VP|9F8G+`i1GZ9RwxO88#OIe7S2xu5wFN1pLjfSOGO1D~7&yLl*hTh0KkacR|s(a2)aPTnZpfz#9sz6}8_2 zHl}Hq$f8H1q#r~WQ|4#Xr@%2IGYgU*2P}kG7JAW`ccWJUmsZ55=YpY)&R7@*fH@Z+ z5X|$iTBSLoK`hI_W>h42&nV$C?*%DPke0V#;Hv6fFz+Q#6ZeZo^U>p0Yp=ds@)qPM zN_pgB*|UU6fb%Gz`T9%vU_bVNkmxZ8u}j zb!E|Y@xMw#hV!!Pew)%zrHsfzE)wKC%YsF~A}?UEAm~DtoJ^#?`Xhy*Eahi`-$u3f z6;ra{Tu`x`c2Ld5w74H~nk?q!UX(DOEjN{)aUL=nt@d%j0zdi&h0nu;Mn0DW&ZV6Z zq3E@o_KDN(bftaLJ#`0XhljGrXKeXY{Gy2`DqA(Y{oZ*pI>YLTM>GP#Mjh^@N{@Kt zoE@JWRXg44i{qn%<95I8^o|DAes6Hvb4I7_!^7@z>v^X=I5--0Uw2WGDH9$W{YSLX z^&>UHs&BeW;_9g`kf`VeNL=gQLL?8o3AjbiSi&=m~3PUi1CZpdI zlbDxMlp5obpIn-onpaXB;~W|k?62VBst^$5?;hmn>*(z1@2BAF=@;VZ924T`2KczG$)ehvM&p^xo09}eUE&u=k literal 0 HcmV?d00001 diff --git a/checkout_80159226/models.py b/checkout_80159226/models.py new file mode 100644 index 0000000..cb6fd3c --- /dev/null +++ b/checkout_80159226/models.py @@ -0,0 +1,57 @@ +from django.db import models +from django.contrib.auth import get_user_model +#SE DEDE IMPORTAR LA CLASE PRODUCTO +# PORQUE ASI LO INDICA EL MODELO UML + +from Productos.models import Producto + +class CarritoCompras(models.Model): +#ATRIBUTOS + usuario = models.CharField(max_length=200) + fecha = models.DateField(auto_now_add=True) + dcto= models.FloatField(default=0) + cantMinima= models.IntegerField(default=0) + pagado = models.BooleanField(default=False) + +#METODOS + + def __str__(self): + return self.usuario + " - " + str(self.fecha) + + @property + def total(self): + total=0 + articulos = Articulo.objects.filter(carrito=self) + for articulo in articulos: + total += articulo.subtotal() + return total + + + + def numArt(self): + articulos= Articulo.objects.filter(carrito=self) + return len(articulos) + +class InfoEnvio(models.Model): + carrito = models.ForeignKey(CarritoCompras, on_delete=models.CASCADE) + nombres= models.CharField(max_length=200) + apellidos= models.CharField(max_length=200) + direccion= models.CharField(max_length=200) + pais= models.CharField(max_length=200) + departamento= models.CharField(max_length=200) + ciudad= models.CharField(max_length=200) + + def __str__(self): + return self.carrito.__str__() + +class Articulo(models.Model): + carrito = models.ForeignKey(CarritoCompras, on_delete=models.CASCADE) + producto= models.ForeignKey(Producto, on_delete=models.SET_NULL, null=True) #Se hace esta confifiguracicion porque es una relacion tio asociacion + cantidad = models.IntegerField(default=0) + + def __str__(self): + return self.carrito.__str__() + " / " + self.producto.__str__() + + def subtotal(self): +#Subtotal = precioUnitario*Cantidad + return self.producto.precio * self.cantidad \ No newline at end of file diff --git a/checkout_80159226/serializers.py b/checkout_80159226/serializers.py new file mode 100644 index 0000000..4851e59 --- /dev/null +++ b/checkout_80159226/serializers.py @@ -0,0 +1,18 @@ +from rest_framework import serializers + +from .models import * + +class CarritoSerial(serializers.ModelSerializer): + class Meta: + model = CarritoCompras + fields= "__all__" + +class InfoSerial(serializers.ModelSerializer): + class Meta: + model = InfoEnvio + fields= "__all__" + +class ArticuloSerial(serializers.ModelSerializer): + class Meta: + model = Articulo + fields= "__all__" \ No newline at end of file diff --git a/checkout_80159226/tests.py b/checkout_80159226/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/checkout_80159226/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/checkout_80159226/urls.py b/checkout_80159226/urls.py new file mode 100644 index 0000000..c1156f2 --- /dev/null +++ b/checkout_80159226/urls.py @@ -0,0 +1,13 @@ +from django.urls import path, include + +from rest_framework.routers import DefaultRouter + +#viesets trabajan las direcciones internas con Routers + +from .views import * +router = DefaultRouter() +router.register("carrito", CarritoComprasAPI, basename="carrito") +router.register("articulos", ArticulosAPI,basename="articulos") +urlpatterns =[ + path("crud/", include(router.urls)) +] diff --git a/checkout_80159226/views.py b/checkout_80159226/views.py new file mode 100644 index 0000000..cdbb6b8 --- /dev/null +++ b/checkout_80159226/views.py @@ -0,0 +1,73 @@ +from rest_framework import viewsets +from rest_framework.response import Response +from rest_framework.status import HTTP_400_BAD_REQUEST +from django.shortcuts import get_object_or_404 + +from .serializers import * + + +class CarritoComprasAPI(viewsets.ViewSet): + def list (self, request): #lista una serie de componentes de la base de datos + # request peticiones de usuario (GET, POST) + carritos = CarritoCompras.objects.all() + serializador = CarritoSerial(carritos, many=True) + return Response(serializador.data) + + def create (self, request): + + #nuevoCarritos = CarritoCompras.objects.create(usuario = request.data["usuario"], dcto=request.data["dcto"], cantMinima=request.data["cantMinima"]) + + serialCarrito = CarritoSerial(data=request.data) + if serialCarrito.is_valid(): + serialCarrito.save() + return Response({"Exito": True}) + return Response(serialCarrito.errors) + + def retrieve(selfself, request, pk=None): +#pk primary key es decir argumento que permite indentificar u obtener +#retrieve enviar la informacion de uno o varios objetos + carritosUsuarios = CarritoCompras.objects.filter(usuario=pk) + carritoS= CarritoSerial(carritosUsuarios, many= True) + return Response(carritoS.data) + + def partial_update(self, request, pk=None): + carrito = get_object_or_404(CarritoCompras, pk=pk) + data = {'pagado': True} + serializer = CarritoSerial(carrito, data, partial=True) + if serializer.is_valid(): + serializer.save() + return Response({'update': True}) + return Response(serializer.errors, HTTP_400_BAD_REQUEST) + + +class ArticulosAPI(viewsets.ViewSet): + def list(self, request): + articulos = Articulo.objects.all() + serializador = ArticuloSerial(articulos, many=True) + return Response(serializador.data) + + def create(self, request): + serializadorArticulo = ArticuloSerial(data=request.data) + if serializadorArticulo.is_valid(): + serializadorArticulo.save() + return Response({"Exito":True}) + return Response(serializadorArticulo.errors) + + def retrieve(self, request, pk= None): + articulos= Articulo.objects.get(pk=pk) + serializador= ArticuloSerial(articulos) + return Response(serializador.data) + + + def partial_update(self, request, pk=None): + artModificar = Articulo.objects.get(pk=pk) + serializador=ArticuloSerial(artModificar, request.data, partial= True) + if serializador.is_valid(): + serializador.save() + return Response({"Actualizado":True}) + return Response (serializador.errors) + + def destroy(self, request, pk=None): + pass + + diff --git a/db.sqlite3 b/db.sqlite3 index 65d1360ab65e3341196663233d13fa26c78092c7..4edb053cdfb744e2e0cbd4d632e2ef9a97cbd664 100644 GIT binary patch delta 5516 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 From 2fc94dd087642d9c0e0904bdcb32338f306ea403 Mon Sep 17 00:00:00 2001 From: gaperezmo Date: Wed, 22 Sep 2021 18:59:52 -0500 Subject: [PATCH 2/2] Fixes#43 tarea taller 2 --- db.sqlite3 | Bin 192512 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 db.sqlite3 diff --git a/db.sqlite3 b/db.sqlite3 deleted file mode 100644 index 4edb053cdfb744e2e0cbd4d632e2ef9a97cbd664..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 192512 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 DcE1RE