From 5da06f86b7fed6664a4abf6f862902a5223f72d2 Mon Sep 17 00:00:00 2001 From: Peter Kotyczka
vp|v}K(YnW z06q84knXVzk^{MFL9j1 z;fTWD8U2re|L5V)4S%f{N!#lcb&RjS;Q=d#{TZXEonvG?XqDqx@7$4DV zVV2)vw1Y>J_>Ll^3Kkt8eze~gx&z{8cN4F90^J!w {R_3!gNsMK9qvv!G>fgElbl4hQa+kyGyKc~>EN-B(XM@l*qn4&I znPe;FhFWgOjjgImx|FyUO~ln`hBl31$98EGBUj$Zi%GX(P5O_m0LWYl_(EHw%r ^T9w63eOc*V5+eiQSN3g$oH+fCkO0HEwQxnVVa=c8yzDoS986 zu5wq?t6XYjd46UNT+XKFmO(0Y(zVoL`eJ%9JvW_RG96SuMufXSau=zjnYo$enbfsw zt9oMkLPsa;)YReKV6nerM7H@}UubNMd34l sn7DGjwzD5>WBLS3$JK*u1RG|Xixm7+P9q>@X3;a}nn_xfiy9A&LggTw4>*%Gp= zg<4VyMdL_`m~kX1PlPs kfUT9g$JP0uAkIcUau6&Dj@2pendFr4W)+|2fZBD z?-$|gnhXsE_VE3Nywktn2<^AM+jBj>P%_CpN*L{{^(Eu%(oT$yRDYM2?=U)0H_*Ji z uWIkwMwe4)`%=G9*}>SIu(l`?j{U210Jz5~^ZnW_iPY5z*FdxPfIm2$pf z`S8{y?fv1@{(LsBOuR`;q )%K>fY8w1{PEne67m6d?86 tcPZH=$!%@ kDS&AlOjfy;a(E>Yg20aC%ACUZwTaua|Z8{)Sr4s l)bb;%@z^MRi zj~)7wgZ&EoF*e5z2md+vTfy^zp9ek{*bGGbzSsA9-;KV*y ;XZlzi+l=BcRDaqAZA*))G?r$jNMxn7K z@?vz17stdnC-PHba!L}%6GA*5O-7G`+YyUfK`xXFje=5amy$R^nBw^ `{Cq9`>ywne#F10)f@ )VebVKR{vF9yKTQp?e#*- ;}>N4qtT`BVkQR2@Z0vA_XE@I|-8NpDwyisg-HA`Fb@mO^7B|rFRwKX3#`)ISN zR2$tZ!V9rja=HgRwAz}N%pPc*a}Tuf WUFHcRIH@r4AC01`j~NB{{S0VIF~kN^@u0!ZMOiNH|6HO-XOO<8V-7%j0x?=h!q zjL|3gX`Fz>2)ri)u&{WC5=Y&xQO35+h70&z!#y;SM%&nLIF9(~E{Wy<@S}l4t|6@y zNpXf;E~#}`^O_m5!e_v5*E7JlCR)~QRrO =)QivKuh||Hv;> z17ls001`j~NB{{S0VIF~kN^@u0!RP}9Gt*O_t1zj{x`2j>KSkkoieguaZYX{+wdK8 z51wLL3y1Xo-qY@pGmLpfgz3E};2s#D0Ra*Za0lH3A-YGy2d<;;fnmC9EX8mhc83Q2 zG(^!_5JA@ebG 3T?_5Et!`}&Ue{;>C}y&vyg?@fRMd?5iOfCP{L5 4hG+ ZAu!#shUAD ^QG{|7S~^AN!{Ya-fgdKzx BQAwE=4BA{yETL ye8Hvxq{RhNaS7u}oYh9j^_zc`*0OyjEXf#rZDG_R HJwQb1!KNl!D z*dM{{|Cb>K@NxDvw#43KFR@W}nC)ko;E#ge4*p~CGr>;;UkjFlzY@F@6oW&-K;XXv z-wnJG_-x>Hhz*n;qf0$XMFL0w2_OL^fCP{L5 %L8GF3s zFzaT97$Y>&PX(BRA*`07J0uZ}V9?DBGVNeTpx@05Gp6`PA0=Q3X!L4Hx)U0aI7E+Z zge&}1pFKd)L)*VI7~#{>b%#dez)Pvx0t}ubZvV54C7R$q=Jt;=w$Oo#Ch9(0!+&SL z+dl#e0E~bDng4eN|H8rEg$=%t01`j~NB{{S0VIF~kN^@u0!RP}yn6^VMQ6a#d?Do@ z3{3d_sX#SzFSkaX_^F7o_}PRA5B%fL7U98rx$BcRuT*c()|MYm3m2}WS7*;oEGO2> zcQ0=8LSeNeE?ikk-rguD=QDGaEA_jLdxd+|+tJ*DDlFvkFSH)$C&KeOr70mgB_zhB z7 @d3TuCAFSYi@v+W0S>P4ifm@v*qr6fPu9AJoOhd;E7=*g=qH?CX| za+zFo{?@I`d1WP9y;web;bBoxiuK8RHyd;73+HFyd6<`#&CTVDjpfZsbu%9?PT!uM z77Nk)*I%HLcGN{4A}LJ4gHEITcoZI#DDh 4s-iY2@ zDzDG2N|Jm&wYYdKd*jMQ>57nE%3p4jVkPPR^_Oca4;B +$MEY3-7HIgzVX|13#3i-9a^d`Kk-uJ9EnJ`7y0WS+ zP0#T6(o5?6wS`L?*Joay*~% x0(lu*mvn7chSR+O(U z7H>soU%paV$Xvei^25Z#i<@_6uPNn?F=_rrd40B#TDkmiv%aa_${>yLljd6)63HlC z|4-)s*>5?>tpNB!0!RP}AOR$R1dsp{Kmter2_OL^fCL^h0%u&a{=Fg}t@;1QtZFD1 z2_OL^fCP{L5
|5-Q*&ndqWB;A~H};$C*V(^kzr=ol{S5nO?5Eg2W?yH2pZ#6- zx7iP|P4*RbgRQUyHp|{&Z?f0ftKa}%NB{{S0VIF~kN^@u0!RP}AOR$R1fFyP9v8#( zaCAFFw@=gUAldp()9op`JxRAG$kzK5-G=D)INc7At>+ls9;MqObbFX=-TidS(ru7# z17z#!quXA(Jw&&DvUT>*t&eWKbn9`u{EVAyTx8>Px%_^d|9{duC)N)MAOR$R1dsp{ zKmter2_OL^fCP|$Lwo2S{{A0!1tfq3kN^@u0!RP}AOR$R1dsp{Kmt!R0s7E?9REMj zZH$#e0!RP}AOR$R1dsp{Kmter2_OL^fa8Dc14sY~AOR$R1dsp{Kmter2_OL^fCQd= z0yzGE^4l0|hy;)T5 %@OE^uXT=K9LsI=egFTlI5XxK$KtFm>1$$|sqoV$?v(t*W(Bp aU&hg~rC14^1?bOi|6PE9HDeR&u36SuR%c_Wh^zdM&5UUrTdgdp02oFu6jxq2|>Z zH#fh`&8=L!#w{$)%%&DsxvS|_F14~eKQjl8X47-aP=iWlUClN?O_*z_4;!?Akz7-& zwJ`TUsb%jfwR0lRN7`P&NXa&!R`Oa=$%namNhucL(A-A3UdWf#T-%bHzMP)E3gRsG z?|XscBj5x)m-DJzQtNdkueMa^(n)>=s#9*rjjgImWwxtFs >r?c1+j SO^UbF&{i*Mb?IKXa`6;&}nWC^n{xJ6tg{H^cV`o zezLbe(k*AaEJT%fCN7D#4`F-hr*v66eH`2E_j5E;N9(GXRGDT#`@-ejq8qMMN00eJ z*Wv3%%vN!&^BE^eG7*a *w}dk1v!=GLI5Q z`)av{eC@>ONcDGV`3|EUy20+>58CqH+0NY2Ci`%2P|$0#$H#gEzV{vv4G%NTduE`` z$>Y9I7Cv)VZH>QUKU9)2RmlmaFT!@y6Fc<>yJ5R;w|v?=hP{BfBS+qi-`v+(xQMut z%=Q@rXGhmF&M2c1$%hc1%}HV`!y8wSj-vfLUp+c(_jMQ(@eT);6SAX^Mz(MD`9i4_ z^XPe_L(vAax0-Riu;&E2oT*)19O!JNo_+xzX_i*&GQ#NiTrn^ITnUdPAe5%qj(2 zzh5jgRJpF+-%!h0)wb)hAhczkD=Q`SIVc%vt}?#R#00agP@no}sZ_|<6f$h7cO*D1 zep|yUqrib$M5$Iy1E^TcGJqmlcg}^P#exb0v(9k?&i~tD8n}xDkN^@u0!RP}AOR$R z1dsp{KmthM2_z6W^gTzvLv m z1E19^f9GvL@Je24-JBP-0Lm;4ptJ)aa I0w|3_qi70}z^s)e zgrd*(w&smtPMC!4YK1JBZ&kAen3Xn7w;mIGp`{4ZOww4T9s#Pu)H9jKRv%UiHB~0j z7Fmg9<6=B6Sxq>-g8Iq_Yi8H-TCmY-NHCa=1=A7n3127@VYZ(&N2+vL*0Q!K9&09X z+^Wnyb<2n>MNQ1is{sI2%N}a2v>+Oj?`D}@!cfoi-q3u6aZs9iAPz#G6}m55#mRzo zzgHOdhSEbj6*eNMLi=q`^YEyT2J}l56wRP9T;m;U?Sn?ffjXZxKqth^9JT4Ji1eH{ zbZL0kYG`3*tseCK(5vqm^X)p7=j&1p65KsdEvibrzFDb3B(b%ULl7q|XHik9H^_>U zLfIT`)J~>CU9N9HJXbq>rcyCZDCj>Vb#F>wNDr}#C77rsrBF0Pim|9gBoWe3*4DzD zT?FKig%%IsoVRDuvw0nQWY<6{9CWQvgSzh`EYdt1hKco2%fz}7- h8WS-_k&XjoD>;?aTIK~M zBPC*rF$ZIm^6H|yOx+qr`*gkUnn0tp#KAg&5za>@1|BiSDQ_H_p5Df;r^{Jm ITWnG5Mh-D9rOTxa7fwXL_Zc2dzinGk7S9)gub64QLe{Ly9>BEx)wTvRe@ zQ7%E-7v)4elaq2%hBkZ`M}l(NuTOh8f#I^IA(?R(pkCdpbB9i$~Rr61N+i)~jXx#<6pG z3+%QTsd{T_Fw#7C+82^x@xyg fkY;W$a$U^oes-2 $mrCKeN^Dy~c+9fM&z1Hn! z2`7Hn %Jd5^enmvJb{`m2#J_VAj#t_IaH^@Af3TBkP@d zDU0qHx~JL*>|pfntGpTI{SBoIgIgG;wN^CmymH#GrOT!xIRF1P;u&a)1dsp{Kmter z2_OL^fCP{L5 m;JVb{Tcfc_DAgZ+3&&*zK{SCKmter z2_OL^fCP{L5 vX#qe-DoTAD`w#rAPn?AOR$R z1dsp{Kmter2_OL^fCRb{Ame-|9sfJ&_}@v#|4usochd2{GXMp9*i{Gn1NL9oud<(K zUuQqeHXs3CNB{{S0VIF~kN^@u0!RP}AOR$R1dzbq1Wxq09YZ7S-xDzZAj2^qWSwef z=|6&Z)a!N(p3;9st*-w+<#9Vk&geg9(%7o1b<_Jkx7#r=Kz_N1{3J`j1$!Z~M}HaY zh!b{)$*%FcMTZ%;BQ!{Vpap)SOD#8QTV(w24gA=_eu}*jd@J~g;APms7ZN}MNB{{S z0VIF~kN^@u0!RP}JOKojy?zHf%q%fXN|LxSZd$3|RX3gQe
_$UKPDMp%|DV9h^d9wcB(f^oK1!W=uB!C2v01`j~NB{{S0VIF~kN^@u0tX^M@Be4-I@teY zzsCL*`-kjrzz)8U01`j~NB{{S0VIF~kN^@u0!RP}Ac0*7Jmv8?hKG8L$0W2LSa96y za}0-idQ5rr{{534NFTDKx66dwkaxn8r#)67 >P{wCAAY(d13PUi1CZpd *ZCdcJ;2YA%$BkI&4@EQycTE2#X% jVUwGmQks)$SHuc57i4oWKalvq%*e?2fdNJoF$2W_poT2s literal 0 HcmV?d00001 diff --git a/app/pyapp/__pycache__/settings.cpython-311.pyc b/app/pyapp/__pycache__/settings.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..004d702d9c62bbbf1170d243105e514c6f5bb682 GIT binary patch literal 2613 zcmb7G&2JM&6rc6C9oun?A>pIaB1*wP)&V%GDxMX@!L0V-ut~bZ{C~rZ<$OA z!SmDe$mTC;g#Pj;qbD|G-uw;B4+tX#VGf6Mt`ky1910;4BH>>-gkHjL@cbMZapUh_ zVe;}&upJ$-N1PJFVI__uN}`RFWE 0cUS9n`L1Pdla?){Qp?03mSz*oZ|w3H za9}a7;SM!;W^0x`)V#p=7+~;2$Q!~{VF9d{0I_3Qgr^38cQl)t1`osDqTr6| ?vd>E;Y_^y%@G**@Wp+x$C;?!}HoLUNN~3T~19*Fj@S8nd=XJ_#-rPLej%HwR zM5x6-(exf+|Hqd_Hpd+O NzWU_Eu(nn#(eA6 z+4IHSh575BUEAI (G4L;s&i~o z+5?ZLCxpHUF>HIcOPDh|vB(Hxkmh$6I @51I6qYE zP>gl*RI`W>Y?<1-g6!`dn3cmd=lUe>FcM+RULMHCtcveCfkW?@hENV(|DnpPO`#0r zAtg`8RBukiqCp $uX->-?Iswwsy9))(-TA@YRx~ zbx5P@Czg%brGkDFdX~ =HM@=*7%TK#;!2iecFb8SNTFo*9k7_Ai}ZhTQJ zKalDbH&Ust$! p z@kpwu_ZxCkcC*#G+yoH_pg3eVwNkBAYSJTdO>)y~jYd;lU#pcH^(8milvY-2VpEdc z+#`9p>g(64WznxAH(3#zqVHCA=fw5qeRWlo i2)Md%tM0~puBkxeO+YUD-ramfS`yc5O%;$E>QYszRencr{4dDc z<&s}Hth8g=yDeu&D_Nv#GHRO^C1X;kY&N_MO2C(bqCfl`3EkbdiQAC=o=)ys7Xa7) zYr-U;UYO%JFO=dU9`eZ?;!f_Nx$)t}P&)U`_3snk-u>?GpHpZ5m^%Av>fCF8TzWmV z&`)?-lwITcDNsyi`q6`2zMt_@iG0XIBht@$g+$gD3<+o#Q0`1W?Iln_;`Vd-{leTq zn)gujTy~6v *p~er?*De?jx_^KLG;n&i3zkAfjO~no2(jM1+SzV#>I{u@n Ql95P=qtQhOM z7{)kBV$~&tih*j=i64zbUTz>bVG-%He BgMlI%OrX3X?w!Xzhg_=b-knAR!`GBG zNq=hNTa;oy!U2zkOu85krQn$F_x(6tIy0IE|ML>BJJ1cRbO@o)?6}ozZZ7*83(hui z PTMM3(Tw*tkDBsL>FBBsJ0_K&P z+F|lGJ >2cXQz&qJ}oc9V8@O3LASn^9o{N_92oncWFkn4(qa%% z_82xDeL@E%6F}11{jrE+(BoDdrv-@H@)~Km--m10@26FL7zQczcb2X#I|soM8SF_% zJ8LU)$Rc=TNxK`LW3%IwWxb{UMp8!w2}>QVpVVJsT3fkTf1?lJLLYCF9mS*~4@I&+ zIC$t2$zlP4LI!Nb3sn@!7!a^Y)|XBV#6MPUa6zXbyD6_gP79Wr!(&mfENfvmEN6lA z10(C&3|(EFrwGr^&Qr88yJ()G>$9`-OXQ-0tm2___~2-Id~p2i1g+1}`YCe2wSDy6 z@zoc ezw6n?&>4P0qJh*n~=sxFb>Oa~T(P!KIq5Trv|RmyTX&M%2m-}!WQQ e=3)_o z)+%?JP+1*K+@of#PD2%UM3;6{N;yV~CaLOUXgt@g8;TzirBPGULpr}5NEy7BNCQm+ z8YzAv@v+1KN;(KqadQ+05pvpY2T3AD7#N}AcH82;wiJ;{k&4)|MK=dj#THy>+7S{T zQH|*Kj7jt}#<&W#$NNFtRSQj_iWtW1srQ8S)TvR7V f1J2 @*)96P~@G}+n`-8Z<( o-8ke^&%iELk_SstA(mNLWFZk%pZ2$lO literal 0 HcmV?d00001 diff --git a/app/pyapp/admin.py b/app/pyapp/admin.py new file mode 100755 index 0000000..9576532 --- /dev/null +++ b/app/pyapp/admin.py @@ -0,0 +1,5 @@ +from django.contrib import admin +from app.pyapp.models import ShoppingItem + +# Register your models here. +admin.site.register(ShoppingItem) diff --git a/app/pyapp/api-client.py b/app/pyapp/api-client.py new file mode 100755 index 0000000..8ffd8e3 --- /dev/null +++ b/app/pyapp/api-client.py @@ -0,0 +1,10 @@ +import requests + +endpoint = "https://httpbin.org/status/200" +endpoint = "https://httpbin.org/anything" +endpoint = "http://localhost:8000/api" + +get_response = requests.get(endpoint) # HTTP get request +print(get_response.text) + +# REST API -> Web API \ No newline at end of file diff --git a/app/pyapp/apps.py b/app/pyapp/apps.py new file mode 100755 index 0000000..e12ac35 --- /dev/null +++ b/app/pyapp/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class MigrationConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'pyapp' diff --git a/app/pyapp/asgi.py b/app/pyapp/asgi.py new file mode 100755 index 0000000..b767eab --- /dev/null +++ b/app/pyapp/asgi.py @@ -0,0 +1,16 @@ +""" +ASGI config for pyapp project. + +It exposes the ASGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/5.0/howto/deployment/asgi/ +""" + +import os + +from django.core.asgi import get_asgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'pyapp.settings') + +application = get_asgi_application() diff --git a/app/pyapp/models.py b/app/pyapp/models.py new file mode 100755 index 0000000..2a6da03 --- /dev/null +++ b/app/pyapp/models.py @@ -0,0 +1,18 @@ +from django.db import models +from datetime import date + + +class ShoppingItem(models.Model): + created_at = models.DateField(default=date.today) + name = models.CharField(max_length=120) + done = models.BooleanField(default=False) + price = models.DecimalField(max_digits=10, decimal_places=2, default = 0.0) + quantity = models.PositiveIntegerField() + + def __str__(self): + return str(self.id) + ' - ' + self.name + +class Product(models.Model): + title = models.CharField(max_length=120) + content= models.TextField(blank=True, null=True) + price = models.DecimalField(max_digits=15,decimal_places=2,default=99.99) \ No newline at end of file diff --git a/app/pyapp/queue/queue_consumer.py b/app/pyapp/queue/queue_consumer.py new file mode 100755 index 0000000..dbd5f62 --- /dev/null +++ b/app/pyapp/queue/queue_consumer.py @@ -0,0 +1,22 @@ +import pika, time, config +#declaring the credentials needed for connection like host, port, username, password, exchange etc +credentials= pika.PlainCredentials(username= config.username, password= config.password) +connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost', port=5672, credentials= credentials)) +channel = connection.channel() +channel.exchange_declare('pydev', durable=True, exchange_type='topic') +#defining callback functions responding to corresponding queue callbacks +def callbackFunctionForQueueA(ch,method,properties,body): + print('Got a message from Queue A: ', body) +def callbackFunctionForQueueB(ch,method,properties,body): + print('Got a message from Queue B: ', body) +def callbackFunctionForQueueC(ch,method,properties,body): + print('Got a message from Queue C: ', body) +#Attaching consumer callback functions to respective queues that we wrote above +channel.basic_consume(queue='A', on_message_callback=callbackFunctionForQueueA, auto_ack=True) +channel.basic_consume(queue='B', on_message_callback=callbackFunctionForQueueB, auto_ack=True) +channel.basic_consume(queue='C', on_message_callback=callbackFunctionForQueueC, auto_ack=True) +#this will be command for starting the consumer session +channel.start_consuming() +##time.sleep(2) +##channel.stop_consuming() +channel.close() \ No newline at end of file diff --git a/app/pyapp/queue/queue_producer.py b/app/pyapp/queue/queue_producer.py new file mode 100755 index 0000000..0ead51c --- /dev/null +++ b/app/pyapp/queue/queue_producer.py @@ -0,0 +1,23 @@ +import pika +##import amqp +import config +#declaring the credentials needed for connection like host, port, username, password, exchange etc +credentials= pika.PlainCredentials(username= config.username, password= config.password) +connection= pika.BlockingConnection(pika.ConnectionParameters(host='localhost', port=61616, credentials= credentials)) +channel = connection.channel() +channel.exchange_declare(exchange='pydev', durable=True, exchange_type='topic') +channel.queue_declare(queue= 'A') +channel.queue_bind(exchange='pydev', queue='A', routing_key='A') +channel.queue_declare(queue= 'B') +channel.queue_bind(exchange='pydev', queue='B', routing_key='B') +channel.queue_declare(queue= 'C') +channel.queue_bind(exchange='pydev', queue='C', routing_key='C') +#messaging to queue named C +message_spec= 'Only this channel can see this message' +message_all= 'Welcome to python queue handling...' +channel.basic_publish(exchange='pydev', routing_key='A', body= message_all) +channel.basic_publish(exchange='pydev', routing_key='B', body= message_all) +channel.basic_publish(exchange='pydev', routing_key='C', body= message_all) +channel.basic_publish(exchange='pydev', routing_key='B', body= message_spec) +channel.basic_publish(exchange='pydev', routing_key='C', body= message_spec) +channel.close() \ No newline at end of file diff --git a/app/pyapp/serializers.py b/app/pyapp/serializers.py new file mode 100755 index 0000000..de95be6 --- /dev/null +++ b/app/pyapp/serializers.py @@ -0,0 +1,7 @@ +from rest_framework import serializers +from .models import ShoppingItem + +class ShoppingItemSerializer(serializers.ModelSerializer): + class Meta: + model = ShoppingItem + fields = '__all__' \ No newline at end of file diff --git a/app/pyapp/settings.py b/app/pyapp/settings.py new file mode 100755 index 0000000..5e86220 --- /dev/null +++ b/app/pyapp/settings.py @@ -0,0 +1,124 @@ +""" +Django settings for pyapp project. + +Generated by 'django-admin startproject' using Django 5.0.1. + +For more information on this file, see +https://docs.djangoproject.com/en/5.0/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/5.0/ref/settings/ +""" + +from pathlib import Path + +# Build paths inside the project like this: BASE_DIR / 'subdir'. +BASE_DIR = Path(__file__).resolve().parent.parent + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/5.0/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = 'django-insecure-z$@7i%n)hn)=5-c8!%)y1-493jkohy8=s-xq8=iu(aud)xx0_+' + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +ALLOWED_HOSTS = [] + + +# Application definition + +INSTALLED_APPS = [ + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', + 'migration', +] + +MIDDLEWARE = [ + 'django.middleware.security.SecurityMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', +] + +ROOT_URLCONF = 'pyapp.urls' + +TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [], + 'APP_DIRS': True, + 'OPTIONS': { + 'context_processors': [ + 'django.template.context_processors.debug', + 'django.template.context_processors.request', + 'django.contrib.auth.context_processors.auth', + 'django.contrib.messages.context_processors.messages', + ], + }, + }, +] + +WSGI_APPLICATION = 'pyapp.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/5.0/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': BASE_DIR / 'db.sqlite3', + } +} + + +# Password validation +# https://docs.djangoproject.com/en/5.0/ref/settings/#auth-password-validators + +AUTH_PASSWORD_VALIDATORS = [ + { + 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', + }, +] + + +# Internationalization +# https://docs.djangoproject.com/en/5.0/topics/i18n/ + +LANGUAGE_CODE = 'en-us' + +TIME_ZONE = 'UTC' + +USE_I18N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/5.0/howto/static-files/ + +STATIC_URL = 'static/' + +# Default primary key field type +# https://docs.djangoproject.com/en/5.0/ref/settings/#default-auto-field + +DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' diff --git a/app/pyapp/templates/pyapp.html b/app/pyapp/templates/pyapp.html new file mode 100755 index 0000000..6957b7f --- /dev/null +++ b/app/pyapp/templates/pyapp.html @@ -0,0 +1,60 @@ + + + Pyapp + + + + + + ++ + {% for item in all_items %} +Shopping List
++ {{item.name}} ++ {% endfor %} + + + + diff --git a/app/pyapp/tests.py b/app/pyapp/tests.py new file mode 100755 index 0000000..7ce503c --- /dev/null +++ b/app/pyapp/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/app/pyapp/urls.py b/app/pyapp/urls.py new file mode 100755 index 0000000..c06f8e8 --- /dev/null +++ b/app/pyapp/urls.py @@ -0,0 +1,29 @@ +""" +URL configuration for pyapp project. + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/5.0/topics/http/urls/ +Examples: +Function views + 1. Add an import: from my_app import views + 2. Add a URL to urlpatterns: path('', views.home, name='home') +Class-based views + 1. Add an import: from other_app.views import Home + 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') +Including another URLconf + 1. Import the include() function: from django.urls import include, path + 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) +""" +from app.pyapp import views +from django.contrib import admin +from django.urls import path,include +from app.pyapp.views import pyapp_home +from app.pyapp.views import api_home + + +urlpatterns = [ +path('admin/', admin.site.urls), +path("", views.index, name= "index"), +path("pyapp/", views.pyapp_home, name= "ShoppingApp"), +path("api", views.api_home, name= "api"), +] \ No newline at end of file diff --git a/app/pyapp/views.py b/app/pyapp/views.py new file mode 100755 index 0000000..4fa2e9a --- /dev/null +++ b/app/pyapp/views.py @@ -0,0 +1,37 @@ +from django.shortcuts import render +from django.http import HttpResponse, JsonResponse +from pyapp.pyapp.models import ShoppingItem +from rest_framework import viewsets +from pyapp.pyapp.serializers import ShoppingItemSerializer + +class ShoppingItemViewSet(viewsets.ModelViewSet): + queryset = ShoppingItem.objects.all() + serializer_class = ShoppingItemSerializer + +def index(response): + return HttpResponse("Welcome to the pyapp Shopping") + +def pyapp_home(request): + if request.method == 'POST': + print('Received Data',request.POST['itemName']) + ShoppingItem.objects.create(name= request.POST['itemName']) + all_items = ShoppingItem.objects.all() + return render(request,'pyapp.html',{'all_items': all_items}) + +def api_home(request,endpoint, params={"message": "Your JSON Repsonse"}): + body = request.body + data = {} + try: + data = json.loads(body) + except: + pass + print(request.GET) + print(data) + data['params'] = dict(request.GET) + data['headers'] = dict(request.headers) + data['content_type'] = request.content_type + return JsonResponse(data) + + ##return JsonResponse() + + diff --git a/app/pyapp/wsgi.py b/app/pyapp/wsgi.py new file mode 100755 index 0000000..303535b --- /dev/null +++ b/app/pyapp/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for pyapp project. + +It exposes the WSGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/5.0/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'pyapp.settings') + +application = get_wsgi_application() diff --git a/app/starter/demo_native_starter.sh b/app/starter/demo_native_starter.sh new file mode 100755 index 0000000..597f8b5 --- /dev/null +++ b/app/starter/demo_native_starter.sh @@ -0,0 +1,3 @@ +python3 manage.py runserver 9990 + +##python3 manage.py startapp banking-app \ No newline at end of file