From b70b1a2d5c76a2e52af4332c481b8111fbb23e2b Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 20 Sep 2021 21:42:16 -0500 Subject: [PATCH 1/2] Checkout Issue 30 Hernando --- .../__pycache__/__init__.cpython-38.pyc | Bin 149 -> 169 bytes .../__pycache__/settings.cpython-38.pyc | Bin 2539 -> 2584 bytes ExEcommerce/__pycache__/urls.cpython-38.pyc | Bin 346 -> 421 bytes ExEcommerce/__pycache__/wsgi.cpython-38.pyc | Bin 560 -> 580 bytes ExEcommerce/settings.py | 3 +- ExEcommerce/urls.py | 3 +- Productos/__pycache__/__init__.cpython-38.pyc | Bin 147 -> 167 bytes Productos/__pycache__/admin.cpython-38.pyc | Bin 323 -> 343 bytes Productos/__pycache__/apps.cpython-38.pyc | Bin 0 -> 393 bytes Productos/__pycache__/models.cpython-38.pyc | Bin 2147 -> 2167 bytes .../__pycache__/serializers.cpython-38.pyc | Bin 1279 -> 1299 bytes Productos/__pycache__/urls.cpython-38.pyc | Bin 514 -> 534 bytes Productos/__pycache__/views.cpython-38.pyc | Bin 1484 -> 1504 bytes .../__pycache__/0001_initial.cpython-38.pyc | Bin 1339 -> 1359 bytes .../0002_auto_20210916_1521.cpython-38.pyc | Bin 644 -> 664 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 158 -> 178 bytes cheackout1130619212/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 177 bytes .../__pycache__/admin.cpython-38.pyc | Bin 0 -> 218 bytes .../__pycache__/apps.cpython-38.pyc | Bin 0 -> 480 bytes .../__pycache__/models.cpython-38.pyc | Bin 0 -> 2194 bytes .../__pycache__/serializador.cpython-38.pyc | Bin 0 -> 1251 bytes .../__pycache__/urls.cpython-38.pyc | Bin 0 -> 508 bytes .../__pycache__/views.cpython-38.pyc | Bin 0 -> 1074 bytes cheackout1130619212/admin.py | 3 ++ cheackout1130619212/apps.py | 6 +++ .../migrations/0001_initial.py | 49 ++++++++++++++++++ cheackout1130619212/migrations/__init__.py | 0 .../__pycache__/0001_initial.cpython-38.pyc | Bin 0 -> 1503 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 188 bytes cheackout1130619212/models.py | 46 ++++++++++++++++ cheackout1130619212/serializador.py | 18 +++++++ cheackout1130619212/tests.py | 3 ++ cheackout1130619212/urls.py | 17 ++++++ cheackout1130619212/views.py | 22 ++++++++ db.sqlite3 | Bin 155648 -> 192512 bytes 36 files changed, 168 insertions(+), 2 deletions(-) create mode 100644 Productos/__pycache__/apps.cpython-38.pyc create mode 100644 cheackout1130619212/__init__.py create mode 100644 cheackout1130619212/__pycache__/__init__.cpython-38.pyc create mode 100644 cheackout1130619212/__pycache__/admin.cpython-38.pyc create mode 100644 cheackout1130619212/__pycache__/apps.cpython-38.pyc create mode 100644 cheackout1130619212/__pycache__/models.cpython-38.pyc create mode 100644 cheackout1130619212/__pycache__/serializador.cpython-38.pyc create mode 100644 cheackout1130619212/__pycache__/urls.cpython-38.pyc create mode 100644 cheackout1130619212/__pycache__/views.cpython-38.pyc create mode 100644 cheackout1130619212/admin.py create mode 100644 cheackout1130619212/apps.py create mode 100644 cheackout1130619212/migrations/0001_initial.py create mode 100644 cheackout1130619212/migrations/__init__.py create mode 100644 cheackout1130619212/migrations/__pycache__/0001_initial.cpython-38.pyc create mode 100644 cheackout1130619212/migrations/__pycache__/__init__.cpython-38.pyc create mode 100644 cheackout1130619212/models.py create mode 100644 cheackout1130619212/serializador.py create mode 100644 cheackout1130619212/tests.py create mode 100644 cheackout1130619212/urls.py create mode 100644 cheackout1130619212/views.py diff --git a/ExEcommerce/__pycache__/__init__.cpython-38.pyc b/ExEcommerce/__pycache__/__init__.cpython-38.pyc index 4fdba204918c1ca8eaa7181e7bddaca80bd88b80..4bd19a8436a31b9f6f2b48aacaada7adc125250b 100644 GIT binary patch delta 66 zcmbQrxRQ}Ol$V!_0SM}hJtuP8X!|)^#e^2878S>M1jM+c7H5~_7sLbv`A51shxi98 Ugu6P$xJEep`}(>DO^h=K07+sKDF6Tf delta 46 zcmZ3)5DoxBwiE&9S&MwI>m{?>E01<%= A^#A|> diff --git a/ExEcommerce/__pycache__/settings.cpython-38.pyc b/ExEcommerce/__pycache__/settings.cpython-38.pyc index 88da244e088a5699252a46eb180515cbdd4ad1f5..e0d5012b1026af63199da16cb3250f25216a97d3 100644 GIT binary patch delta 302 zcmaDYJVQh~l$V!_0SFwOJQEM|GB7*_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@vH_*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%&ZzhH7Sr!iy8@?Eu8Z9uu|A#ZsA5*iuv@ z#i>QbF&+UiE~&-YCHVz00YUzeuFfI;!3yE7PBE?#&i=l>u0fOK8TI)2 G!oL6{2Pw_~ delta 109 zcmZ3=e2Ymtl$V!_0SJoST@&{J>Bk@rGGGOA9DumkW}>z^S2|M^dkR}HgC_gL3ipXG uLdDITtztrpQ;UjYvPu*4Qes?Ei?d7e3nphU>ho{_wec_tF!M0-`~v`L`4>O{ diff --git a/ExEcommerce/__pycache__/wsgi.cpython-38.pyc b/ExEcommerce/__pycache__/wsgi.cpython-38.pyc index bdd487de9d32b5a6d6e9c5520e94a343c7d94a20..93c8d8cec029fd5ac9453484cb5c9ae636b0df9a 100644 GIT binary patch delta 68 zcmdnMa)gCDl$V!_0SM}hJvVY+X4Lj_wu%WYPAw{q@d$`igAr__V@L54VwIw(Ha1h-xRk1 delta 48 zcmX@YvVny=l$V!_0SIIlU16SmlETWTAW>yUoe@I$r=Dc CP!5Cu diff --git a/ExEcommerce/settings.py b/ExEcommerce/settings.py index 274e968..1ae68c0 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', + 'cheackout1130619212' ] REST_FRAMEWORK = { diff --git a/ExEcommerce/urls.py b/ExEcommerce/urls.py index a28b9fb..012683a 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('cheackout1130619212.urls')), ] diff --git a/Productos/__pycache__/__init__.cpython-38.pyc b/Productos/__pycache__/__init__.cpython-38.pyc index 12858eb03c6a3edcf405c69aa3b3a30d8cac3091..3e5eec6c07b2d698dff18655eabdc8c65cf4ecc1 100644 GIT binary patch delta 66 zcmbQtxSWwYl$V!_0SM}hJtuP8X!|%@#e^2878S>M1jM+c7H5~_7sLbv`A51shxi98 Ugu6P$xJEep`}(>DO^h=I07w86ApigX delta 46 zcmZ3^IGK?)5DoxBwiE&9S&MwI>m{?>A01%fA A?EnA( diff --git a/Productos/__pycache__/admin.cpython-38.pyc b/Productos/__pycache__/admin.cpython-38.pyc index 5e45772cd198c8e54b8684dfc45553622f334209..a1be19918e7a649bb5ba75068f53bf268c98bf41 100644 GIT binary patch delta 67 zcmX@ibe)Mil$V!_0SM}hJtuNM*Y)j2#9e>EzT~)1pt$56W#y- delta 47 zcmcc4beM@dl$V!_0SIk#MVDB5c&;Zxrnbwi29v+vud)YM%WCU&x0VGPXK=2!Vw26vCdb@wgPpy zeV7jXI^ev@O38WM;k<;-!sT7gU)EXiSMgo^L?(m@4g8FwW45r;ST;`Bg|yErrCBnI z?`U)#&-*v@oYC7To=oVB(GAU2SxS>jwjIqft?f|18UmW`DAofAaKopt_P%(^s-+sb aKI3Xl<$r}XbH}cOlXmY@cZx=*OMU^6eOx#I literal 0 HcmV?d00001 diff --git a/Productos/__pycache__/models.cpython-38.pyc b/Productos/__pycache__/models.cpython-38.pyc index 39e54e58bb205bdcd78380bbee851f6f876981af..78f352982f60d53b775ebea462c80beda4a71b9f 100644 GIT binary patch delta 69 zcmaDX@LhmAl$V!_0SM}hJvVZDF=~4`Tg8MHrxq2*cm%|_q!wqFwu%WYPAw{q@d$`igAr__V@L54cfekQHlist?d+f delta 49 zcmaFBeTJJml$V!_0SGpRxNhX0z$k9&Y!wq)oLW>IlU16SmlETWTAW>yU$FTYqZA7O DTAUA2 diff --git a/Productos/migrations/__pycache__/0001_initial.cpython-38.pyc b/Productos/migrations/__pycache__/0001_initial.cpython-38.pyc index a8fb1622380f84374a496796114a6a91ff256b30..b844bfb20e5478f82cb08885ada1be498c08cf4a 100644 GIT binary patch delta 68 zcmdnZb)Jhml$V!_0SM}hJvVY2uxLj+Tg8MHrxq2*cm%|_q!wqFM1jM+c7H5~_7sLbv`A51shxi98 Ugu6P$xJEep`}(>DO^kB@08g6}O#lD@ delta 46 zcmdnQIFFG#l$V!_0SI)5DoxBwiE&9S&MwI>m{{Zh02Q7N A82|tP diff --git a/cheackout1130619212/__init__.py b/cheackout1130619212/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/cheackout1130619212/__pycache__/__init__.cpython-38.pyc b/cheackout1130619212/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b38c78536f36e8074b5db91246f73320d5fc5115 GIT binary patch literal 177 zcmWIL<>g`kfi6Hthh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o11(*(xTqIJKxa z#v>rcCAB!aB)=dgAjm(`)j7mJSRvfiDaJLz+27aKH7Lfl!ZkTRH#fB?IW;CZBQ-HO uJHNEV(9qbx%+S)v&?qK8J~J<~BtBlRpz;=nO>TZlX-=vg$iB}&%m4t`!75t- literal 0 HcmV?d00001 diff --git a/cheackout1130619212/__pycache__/admin.cpython-38.pyc b/cheackout1130619212/__pycache__/admin.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c9d8d5c3afcc8ace02170011beaace06c6b694e4 GIT binary patch literal 218 zcmWIL<>g`kfiB3TJF^Gc(44TX@fuanW zjJH@5Q*tx&{4|-O_)@YG^V0M6lJoOQiZYXmKnAR2C}IXuVB%M>vsFxJacWU zOKNd;Nq#|0K#+f=t8<8dutK=2Q;chbv%jyeYfy}9g==ztZf54QLdZi#!)0fk@e$3!lu#u{Msqz=_ufFFuQZ46zI%v=k|z?M_wWgq z(^SN`*YDnV?qzpSyYgDtyLP+nw%5nrqZf!M;z_{qKZ{`+$I_0U5~S4irKN@8Yht!6G{mBwWt>BRF4g6#C2MaO=`v#waPg?vSWujrEf&;K>I=Cb#A`W zxGBg<(itGVUbP;*A5X?Oi}^txXCumRv+>yIy#Yq>Kbh`k{z; z;dGCgnz&mm6P4@sBgwML_qLNvj70Sie97%gCBjkilXw9UxgTJK#j6g%Lm26=V1z~q z*Jw@XobVdl`k77*Q3uaBBh(ZYtZkaNg|iU3qVZCr9yhu5N~29~a|eD~+~p1UUEvvj7I*rw!Fqp`9Od@PA~LlJp&oFKeZF+TCIZ%E4K19XDXEEq%cwu9nIIEuE7(9 z<@;%-e18psY0(?66`eft-&<7{U8peMw6d0&N*7KeKa4SnYUbe*tbHl+c45qbV!T1Fj~Z{*>IP$Z*0v>34M5Ft^@)6KQTEu zt5Hkn!k$Hra8V&}8=#U#rFu|6sdZ3*1B`bI8+I=Y@(9s%Wa5LaMJ5ztH&7nfcVb3R z$w%FU7Z=uDE*UrELl{$>R;QIa{}&nTG(Rla{P9AWwON_z>~6cIun~0&%|~buigMQ# zilnf*n+M&^t)BW6BYR%~SAt9y_ITn|1h4}jK*$-dz`lzgxeV;vFoBdxOVmrCTQyr( zn7gEmkJ9aJG{p*-M^I>ksn4(}M6MF^J@BZ_ z#v+PBE<@8OaVmEEz>_&f?DGY(Bz&%(Of>sy|8Vh zFucHCIrSAdG2ucUYLOe7MnX@aTXREEEVp8#a&n&zBMH6>J?y;Hr3lo z$RtXWb0HO|^ht~ttIGssAGX>7AxJ+j@aXu@$-DgjqcVFywcf%!-5zl33`dwQXyaS(7 zSV)&zR5swyzqBM;Wd((c0?pS!%};f-;X@m?GC;Vr)bG%`etjCRWs$_Qbdv%-yopg( zNMejoom+Wncj+s!(d9OZzud2+iTUH@Euv)eUk@I@1wt-)L45;Ws)v)&CY&^{-~X47 zE%fszXGy*WA(+$JgtWjJ*;*2UdcR%K4JlN?MiNHmYc9tU`$+HH)4iQ?MwD*$a8~96 ijQ@nPdC(#f_6t&_Fy&rc(16BS0_PGBPO1^{rH9w@?gdP;TZALd?gGBB4|c(%4yCx zqgJ!5k~`d4@=8`cCg3axcfq~&gaiJasao)k4S6f z(QG0urk#0QTxc(yC0Qw;MRl+T9lc4L|>&1v^A-UhhB2CInYNtON%bRL~ zrTBK(3Upmu#so&zQjePS}Qo7(eh b?eFALlo{;Wi&fJ=lQo#nT-va&vikB0+;xq4 literal 0 HcmV?d00001 diff --git a/cheackout1130619212/__pycache__/views.cpython-38.pyc b/cheackout1130619212/__pycache__/views.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..49195206075c9753c6705c339a0abbeebb87c731 GIT binary patch literal 1074 zcmbtTO>fgc5M6&HaU3T^xghn_YdA!tNJt=r2*H9J(pF8%$I6mryjz-N?M-)`mU4w3 z0!RMRUODj>I5Fd-G)P54>RLN~`)0iRc4mCsZ2AO7YcNX2HX%Q7u{~T^JcFroFpMxu zkj$c%h1eE$=1`}^j&QRIt(4dm)hYU2QJa#NgjHDe3t?66%)QSJtpihI9x&d9@qwu` z9~ghbG+1Loy1`F4lXNXpRXk^00rJjg{6h0WBR=AKDRa#MTlZ3o-5zk8welSRoKTAq zYIBFWyfUwTt$icZV-}oZ8-JK6H7n%caJ1j88!wLYB;#>x{5Z}eTM5KL9G|TcvG&mB z=939mvqYG-F5k0HT*awKw5F|1z))sOm1t9w@8>)%v~dz4jCZ!;>Jskpov0SbE6uOT z@NskuJL%}vVf2FQMIo2b;nBgna5z1f?7j(~N8#Jy!FU`VMd8OVm08AB%A@p@C+R}2 zihlpW{fGTWd;Ptr%u{c9sj9F&mRMsYJQwt(A)*-M1E3iFyI&R1P E4U`J?2mk;8 literal 0 HcmV?d00001 diff --git a/cheackout1130619212/admin.py b/cheackout1130619212/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/cheackout1130619212/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/cheackout1130619212/apps.py b/cheackout1130619212/apps.py new file mode 100644 index 0000000..1b7ac24 --- /dev/null +++ b/cheackout1130619212/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class Cheackout1130619212Config(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'cheackout1130619212' diff --git a/cheackout1130619212/migrations/0001_initial.py b/cheackout1130619212/migrations/0001_initial.py new file mode 100644 index 0000000..820374e --- /dev/null +++ b/cheackout1130619212/migrations/0001_initial.py @@ -0,0 +1,49 @@ +# Generated by Django 3.2.7 on 2021-09-21 02:24 + +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(blank=True, max_length=200, null=True)), + ('fecha', models.DateField(auto_now_add=True)), + ('descuento', models.FloatField(blank=True, max_length=7, null=True)), + ('CantMinima', models.IntegerField(blank=True, max_length=7, null=True)), + ('pagado', models.BooleanField()), + ], + ), + migrations.CreateModel( + name='InfoEnvio', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('nombre', models.CharField(blank=True, max_length=200, null=True)), + ('apellido', models.CharField(blank=True, max_length=300, null=True)), + ('direccion', models.CharField(blank=True, max_length=300, null=True)), + ('pais', models.CharField(blank=True, max_length=300, null=True)), + ('departamento', models.CharField(blank=True, max_length=300, null=True)), + ('ciudad', models.CharField(blank=True, max_length=300, null=True)), + ('carrito', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='cheackout1130619212.carritocompras')), + ], + ), + migrations.CreateModel( + name='Articulo', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('cantidad', models.IntegerField(blank=True, max_length=7, null=True)), + ('carrito', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='cheackout1130619212.carritocompras')), + ('producto', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='Productos.producto')), + ], + ), + ] diff --git a/cheackout1130619212/migrations/__init__.py b/cheackout1130619212/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/cheackout1130619212/migrations/__pycache__/0001_initial.cpython-38.pyc b/cheackout1130619212/migrations/__pycache__/0001_initial.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..85ad35005f2bc9246ac54ab2dffb63b1fd808297 GIT binary patch literal 1503 zcmZ`(TW{Mo6qYDimTyVwW^1}@*Ea)$VS8wScEiv_cD7(}6ErQh83qJeJa*{FqDDzw zlh^Il`wiRU{>gp=U-vNN9}LB??NGk7oihp~&iP24%Xbd>tX3-|LWI#-JGX{j21B;P~Ik2HHb+i{KPF-f=S6~h+ z&h0T_E@CA_^eoRUL@J1sQLD~P)M}_zP}^GXZzEED1KEM%&$VBSF_}2*#+>Bd>eqU^ zx#4YhiM+M8|MmuQYXjNaKyGg!?;x@T+tZzCae8A~XYaE2<^*GO*D=0-ZHyn_e{bgZ zKbF{s|M75V>A}_>Cf494`v@y}SC#s!53QIb5hx0+Q2^UxKPW z2RRZ6_z|6fDrQMWB^Ot}VUIK{RTzadI>*+cFZ>XqNqVO2C<{YX7(;MI8|KnWB)<14 zW2(d;2{MRMaaBYMs_fAy?ehp-D<`HC$^<56=f0dVhma+zbQFz6FM7^}aw0JsNl-40 zAq+Va{9|lWw8|v}0d}^sW6Bd%We`)DV#Mf4IRVcYWvUn~xVXFFe7nEsazU_+%gJe5lD$ zCGU*NrP#$fF2wR-C}_Hnt4C1^6IdRq9taTvjaKJ`1U`wr!jd~|N~4KTgpHJ&r>*HM zdi$r|ez&K}B8KJT@v9*pVkG(U61<1QXV@*t@XM277n1W-#KV&($KUq6r^lyvzV00i zd*67+{eJJsu=k>e?9M<2FubM$!&mRq5Zk%!FL`Ok7g9ffx?z$oE-tYx@{e7xO+t3f zy19k3ZkAt?zwOEj)5zl6`xEin3g0vL{zCna++xGQ*2&XuvQbX>g5%q3u(^0An=3-( eJ)OCZ<`oAE=~Kj%``Mz#pX*X3`q+-?TK@tR%(Gko literal 0 HcmV?d00001 diff --git a/cheackout1130619212/migrations/__pycache__/__init__.cpython-38.pyc b/cheackout1130619212/migrations/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..accf7116d8bba87275cd6a76f3871ceb83ad79f1 GIT binary patch literal 188 zcmWIL<>g`kfi6Hthh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o11;*(xTqIJKxa z#v>rcCAB!aB)=dgAjm(`)j7mJSRvfiDaJLz+27aKH7Lfl!ZkTRH#fB?IW;CZBQ-HO zJHNEV(9qbx%+S)v&?qK1GrcIWBr`v+I3_+mGcU6wK3=b&@)n0pZhlH>PO2Tq>d!#T F008kSF8=@k literal 0 HcmV?d00001 diff --git a/cheackout1130619212/models.py b/cheackout1130619212/models.py new file mode 100644 index 0000000..e14d2f9 --- /dev/null +++ b/cheackout1130619212/models.py @@ -0,0 +1,46 @@ +from django.db import models +from django.db.models.fields import BooleanField, CharField, DateField, FloatField, IntegerField +from django.db.models.fields.related import ForeignKey +from Productos.models import * + + + +class CarritoCompras (models.Model): + usuario = CharField(max_length=200,null=True,blank=True) + fecha = DateField(auto_now_add=True) + descuento = FloatField(max_length=7,null=True,blank=True) + CantMinima = IntegerField(max_length=7,null=True,blank=True) + pagado = BooleanField() + + def total(): + pass + def __str__(self): + return self.usuario + def numArt(): + pass + +class Articulo(models.Model): + carrito = ForeignKey(CarritoCompras, on_delete=models.CASCADE) + producto = ForeignKey(Producto, on_delete=models.CASCADE) + cantidad = IntegerField(max_length=7,null=True,blank=True) + + def __str__(self): + return self.carrito + + def subtotal(): + pass + +class InfoEnvio(models.Model): + carrito = ForeignKey(CarritoCompras, on_delete=models.CASCADE) + nombre = CharField(max_length=200,null=True,blank=True) + apellido = CharField(max_length=300,blank=True,null=True) + direccion = CharField(max_length=300,blank=True,null=True) + pais = CharField(max_length=300,blank=True,null=True) + departamento = CharField(max_length=300,blank=True,null=True) + ciudad = CharField(max_length=300,blank=True,null=True) + + def __str__(self): + return self.nombre + + +# Create your models here. diff --git a/cheackout1130619212/serializador.py b/cheackout1130619212/serializador.py new file mode 100644 index 0000000..d9c7d9c --- /dev/null +++ b/cheackout1130619212/serializador.py @@ -0,0 +1,18 @@ +from rest_framework import serializers + +from cheackout1130619212.models import * + +class CarritoSerial(serializers.ModelSerializer): + class Meta: + model = CarritoCompras + fields = '__all__' + +class ArticuloSerial(serializers.ModelSerializer): + class Meta: + model = Articulo + fields = '__all__' + +class InfoSerial(serializers.ModelSerializer): + class Meta: + model = InfoEnvio + fields = '__all__' diff --git a/cheackout1130619212/tests.py b/cheackout1130619212/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/cheackout1130619212/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/cheackout1130619212/urls.py b/cheackout1130619212/urls.py new file mode 100644 index 0000000..74568aa --- /dev/null +++ b/cheackout1130619212/urls.py @@ -0,0 +1,17 @@ + +from django.urls import path, include + +from rest_framework.routers import DefaultRouter + +from cheackout1130619212.views import * + +router = DefaultRouter() +router.register('Carrito', CarritoAPI) +router.register('Articulo',ArticuloAPI) +router.register('Info',InfoAPI) + +urlpatterns = [ + path('crud/', include(router.urls)) +] + +#localhost:8000/cheackout/api/crud/ \ No newline at end of file diff --git a/cheackout1130619212/views.py b/cheackout1130619212/views.py new file mode 100644 index 0000000..4b1ea9d --- /dev/null +++ b/cheackout1130619212/views.py @@ -0,0 +1,22 @@ +from django.shortcuts import render + +from rest_framework import viewsets +from rest_framework.response import Response + +from cheackout1130619212.models import * + +from cheackout1130619212.serializador import * + +class CarritoAPI (viewsets.ModelViewSet): + serializer_class = CarritoSerial + queryset = CarritoCompras.objects.all() + +class ArticuloAPI (viewsets.ModelViewSet): + serializer_class = ArticuloSerial + queryset = Articulo.objects.all() + +class InfoAPI (viewsets.ModelViewSet): + serializer_class = InfoSerial + queryset = InfoEnvio.objects.all() + + diff --git a/db.sqlite3 b/db.sqlite3 index 65d1360ab65e3341196663233d13fa26c78092c7..7642b5c619aeaaa5bd9caf5724431752e9a72afe 100644 GIT binary patch delta 4626 zcmbtYU2NOd73P&FQxqlM*iItHX(r0CEXlGY{^&QE*C>r@yLS8&*voz%6k3ukCAQ?s za+(GkSjTH0+M#Qz2LaoFrogauK!71L0(aPkty|Gy%Q6&bADRJe+J|9V(q`DOB`dZf zyCg+gQkdjn27Dl%`<-*ockaFC9`c!AlFxidy|lM8hGAG3{cC><=ZAz{F)TFxk_D+u z@U}eQga3iIFICUMPV}&A7>VvZ4kUZYa*fy#u-P&;KlvB(M`U?3wL>7KFZ5b4!IR1s z@?!Q>d9BKE0vqF!Jjb&v%VmnCVznqP@hr~;*<_IC7?wZ4M-Fgoh)+i1Q8vEEg1G`I zajjaYmQUqN$V$j4zg8;cGf%e~vcdr_5{f3{Y=nEX2N@oeS}get@>9<6EEi*WK9=F) zk+`7;HW7~{B2MJN)8gPh0ju*02|mgSqq{BGuH%XoBG`?lT&m_PnYC3U7K)YCYNkd% z;_OnHs)opnPx6~T>@8TR7vLV4q3^0P!vWCyV-}xgX!=zQCg2P#z+3PN z{3HB1?1vP6gZ?%BD!c$+*mN^rrzJNoxPZZ`6-x`{eCc$tOb_6K-w2TvE0tokoGmY} zRK!&WgA4nNU}B|O%&sk!?LD~5tpu&CYGY}8(ArYnxXal#Vyh*-^?O9&0tP>U*WmBq z&)_TYdAJCtVI1ya%bJ&1$Hfe?NJL@NiE9l`b)z%&j{3ddY- zIq^*#dgT4tWkVy*){$ELm8<3i6|WH&#(ee<>{sls+kaqx*?!hOZ=bLy?fdNx>Qm}N z>P_l3>P6}-m8B-AIHL3mo3s-Len6it=AS|*r?C);-8cvWI+tI{SM%HIxT?+;#L{Au zI@XN?FQCO-ZW|iig98CL6t}I+BYSZW2abmCtkkl!f;!lkq1BM@!2t&x@-(djoHD;% znM+F_y9);aU~kN#X~U|v;a<^7XupKIaNq%U*|UZWDo9H4xm_BDoHz&rs^N88A5irT zzuWpjCApOBcw6b;fde}oqq1~F6e%c@S0pD(JFCdB zB14J{%90vVWI&OFiuB9U=2N6skpqhK$dc^0)FY3AtHF+I7=<6lEY~gl_;JTw$E^Jg z>R;5L%|s4apY6DYw138@P3OUFa0y)63LOF)GIfiue)9H-t@n)7O14z(yLM}B%Qm%j{xEn8Y{lK+oC!Gt7q{Mj9C)vp6CLl>3C1+$BmYUh zOmRJ&v!1oiTK5wl6PJl|#8-(B0Xp78ch-px$(yiXz%R6&v&X~| zBku!7K6#8%0|Rjc494#{doonrAkE;I3T|u@{rt*cRo4JZa(VSc5!%bO9#k2Mwp5c- zE`ngfu+iDo<82&3rcsfj0y2rG^h4cpre!0k5qi5Fui7=@Z#~vcB-+fv95Uk$8k7Q! zO`Ac##3BoCxV1*;Y_vn~3nNrOXs;SFt`WbE45`RQ;F`KAWKGoOvR zknGOiUT*XNmEz$IAW%4XZ}n-4PX!LDz(#PgPAVy_O;dad((Ok`zqhSGY0)W=&-oC< z?bpf`s#bbbvvTv)=SAb5U`z383P{Ba98y6|5h-reXGQ@%;z1afce}o6VJM?pU4y1u z9=qHYn&|5oEYjCefqI9Q)(MjXTOY>AeGUgnrW`Btr*aE?X0;&l(O5qpL(LuAKb<(1 znoN{1t(lMAUQ z661kXILSXbH(bb9N@6KjZtd-ODsmvog}6i_9*@+DfBTNr1aDyQ2E4P`dFTUp*lykj zG)t4!>?BXFAtw&9fOTPaFqnimJxNJdedG$fN_rS z(qCfwjG*X>R{JVL=Y7o7q_Lf5*2nnzn!@VyuaC_T&Sk`B`Qd!fNtWc^Pv(;oqxtzn zlrsuan=JHjJ{nYOBbr?sv5}N_3q8d$oko2@mWa*KX|y^c4_Y0)FgH(`5R&urNmejo zqZXF3g@^;gCDrF>Sr_eD!jhEecZeuo-MF`GI( zk$&J7sb#2GAS;%t#hjSyLw8X%znHHulXDXjL QPUK`W^TkCpT4w`bx8YuGU>o;R z{Zb0}>(2*4R@xYwB%C87;JHqflmRC_Ax5P1!N9{==~y|la@56A?IabbzkdkqmQ+sS zN`7gnm@D@&r^N~?gB72^vVM(mu2{)uv&C}Bcz8uDt{RWz@+&C&;&Q%Jy^rfqwz#Gw z*=XMXFVh2({~UjmaL&wtjj8))xpjq%Qr(Iee0aV!gAVomuy%ra97o>*{PpP|aG};? zHM^!Jq>>kxv>c=BrFs;7D_9oq*>Ef3q9`xTe7TI^Q?rVRf4%es;S2=8Mz_LEe*sfl z`?g1@N8O`r{$y?D)IS~pXUyo6Lwx}~neOeF(F@{O?M0k5d2N>gFf*5N@L$*WPXP9R`lEZP delta 463 zcmZp8z};|wbAq&>HUk5L8Wb}E>6nQ+#-iE`diFP2fjmb3-$0TawR=EjmHenAC4 z{}2VBh_DPVNStfsWOf1V&58=;T$@))Ww3J2;_v2{q znyK*eGb?f=mX>71rx)dy7Vz*f%X5OcrNya5{8t!+A(92DMY);9#hLly?99fDlOJ*j zGjdM8qOZ*;y2*egK!}syf`Q+HKaf9z{~iBn{#*QeH!CzW@=aW@aI!`J88J?Na|Zsm z{5Sbe@$ccE&)>zL&L6;U4s?qw|77#|XPH%a-c4p-;0bi_Jf6+()`%IiG4f|J@Mi*5 z#Pd(jjAxq7!N~ue0faUSUU<#F`TKuf1!h4;^X=>kj0TJ>jb1YB+pQHDPx3LV@as-z zH(>MxYQ4)hUDuxRiY_oj1R1|E@c!ow;W^0tm0OF8iBpH8mF*_mGBzRByR0fK&shSP zCIXeXGB9k{b6{*{oc_+4(RI6QHPc2GM!V_f>zNE#1)4Q&*|* Date: Wed, 22 Sep 2021 20:32:43 -0500 Subject: [PATCH 2/2] Solicitud Request Issue 30 --- .../__pycache__/urls.cpython-38.pyc | Bin 508 -> 530 bytes .../__pycache__/views.cpython-38.pyc | Bin 1074 -> 1614 bytes cheackout1130619212/urls.py | 2 +- cheackout1130619212/views.py | 18 +++++++++++++++--- db.sqlite3 | Bin 192512 -> 0 bytes 5 files changed, 16 insertions(+), 4 deletions(-) delete mode 100644 db.sqlite3 diff --git a/cheackout1130619212/__pycache__/urls.cpython-38.pyc b/cheackout1130619212/__pycache__/urls.cpython-38.pyc index 4ad6cda2ab8f87922f4da9661f71f4fc91b3a58e..4d81a3bfb932d24674ef0c63a58078886d649286 100644 GIT binary patch delta 155 zcmeyvJc&g+l$V!_0SNB*dL?!-GB7*_agYHkkmCTv#TgT|t&OtSQ&>|uQ`l12dzl#- zQrQ-;r*NclEo1_+8B;h@nNr!ZxSJW9nbH}fcv85688o>kPBE3a#o<^~l9^nZlOM$b mVreqo;z&v?PR&cqO`UjoB^y7`{38CzO^hXM0*pM&eE$JhR3lyh delta 133 zcmbQl@`qVFl$V!_0SNv$dL~veGB7*_agYHEkmCTv#VHfDt@ReLr?94SE@Wb4NM!@E z*;2W{Y{nG!RHjt6EbeB;W~Ow;D4rCKUl5Z}H3c5K%Tg+hhEkGKz3QX(V}LQNfu6e&)KodPFIr|a#8oO9=MXV)pI zlBZO>^@%UgJo1(Hl_$OePt2U{CaHqNo@Q?Dx3hEeZ|9(1uQFU)fBX>p4r71O$MuC6 zdyJ%hM<$ry8OwRdImuRL<#uS7vYk1(8@i?JWM1xvekr?IkXOP=DSKIUNawt4Wyro~ z!WY47CIab?YZrD{N2DUEh*S}2AaVzh6;VT^w$N#c`hc|?f1@v~&5ggU^>kxx14R$y zL`XpC-u7^~7j3MqMNc-jqW#{F2fe`%@!%wtFO}4a1@r&nUnP_F~ILl1%VkY4fop5) zVG9S}j&Lzwo>|!hohGx45|&V!my3Qu)J0M)WSWinTkDdYTiQOe$lM$2+}6&SJ$5fB z`F5YG>g4g{6b%PU!_dIPa0i)bEU|g2!6VQSv5wo0ag@vsjSmv@sdQM07mlg0x~vG6 z_FaZywLF}qN)x8Y7UNZ3hiCcE-nC@HhP2I8oS!NurOGs-{x>1PltXNWGo6bZ2RyL0wrpKR7EFomI{n3K9TcK zJqb{N0?KRKhL1`66J*AlNBDkpUV^5zB&({N3K(6055~B9J;u3OzwJVWOp+?B5Tok? zpA);vTPacU-~(h$q(wUgZiys_+*tqr^7&6Ehl`u{o+n|Iwiacl7B&?EdXtm1xM~m} zZ*Fz9g&UtCU3ESo{q|jRPmJTquSMqwCr<|!Qv}Fo(_Cz+qXKj?(+a5W;fJWDqeH;C z@Unp8j?%H7&5L3hH}}9LJNIvbSAU_N3m@EaWji=(WTwK_ZF}#!SrlMuJEZvxC*eTq n@;V!T`9<}C7O`8ZXM%6%^Xxm08j1>9!^WstL;*gl&T8XdF70>D delta 525 zcma)&u};G<5QgJ4O`XIIC9G74F(42-2&qB{b)c%$b|4Fi>J(Z+B3)7#JHP`_nYTb< zU}t0I0rCX!7TiHg5n{lWf1SUx@AvstJaM;It=bw6x6urb^{KnclIiAFud7K-8gZqo z9ci*G&09^HQE9|)N`Zx>A~_O1BQ_FC+DPmfair7HeDO||eO8zdB{G8P+XD;KJ=-u{ z{y0t>?PkljphDL;iG>ol^K>VIVHg9I zDfk?MLk9&(mE_CwJ6fWshC+N{PNa{EhT7FVdWU*8#N?N^-Ao4Q58uEdaF|>T)BhNI zSf19xn075+6g4>tle2U?J5M3+kMj(4%oNKmL|J}1fbcT9PT>Md>aJX8hI%Zw59kj+ gdjYEQSEmKvyG-Rcj`kUz$f#$b3np}q(=$Bd1IXHCV*mgE diff --git a/cheackout1130619212/urls.py b/cheackout1130619212/urls.py index 74568aa..0fd87e3 100644 --- a/cheackout1130619212/urls.py +++ b/cheackout1130619212/urls.py @@ -7,7 +7,7 @@ router = DefaultRouter() router.register('Carrito', CarritoAPI) -router.register('Articulo',ArticuloAPI) +router.register('Articulo',ArticuloAPI,basename='Arti') router.register('Info',InfoAPI) urlpatterns = [ diff --git a/cheackout1130619212/views.py b/cheackout1130619212/views.py index 4b1ea9d..c6e2185 100644 --- a/cheackout1130619212/views.py +++ b/cheackout1130619212/views.py @@ -1,4 +1,6 @@ +from django.http.response import Http404 from django.shortcuts import render +from rest_framework.status import HTTP_400_BAD_REQUEST from rest_framework import viewsets from rest_framework.response import Response @@ -11,9 +13,19 @@ class CarritoAPI (viewsets.ModelViewSet): serializer_class = CarritoSerial queryset = CarritoCompras.objects.all() -class ArticuloAPI (viewsets.ModelViewSet): - serializer_class = ArticuloSerial - queryset = Articulo.objects.all() +class ArticuloAPI (viewsets.ViewSet): + def list (self, request): + articulos=Articulo.objects.all() + serializar = ArticuloSerial(articulos, many=True) + return Response(serializar.data) + + def create(self,request): + serial=ArticuloSerial(data=request.data) + if serial.is_valid(): + serial.save() + return Response ({'Creados':True}) + return Response(serial.errors, HTTP_400_BAD_REQUEST) + class InfoAPI (viewsets.ModelViewSet): serializer_class = InfoSerial diff --git a/db.sqlite3 b/db.sqlite3 deleted file mode 100644 index 7642b5c619aeaaa5bd9caf5724431752e9a72afe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 192512 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