From 92b709196731d60c3c0aaf05c4602b81f5979bb0 Mon Sep 17 00:00:00 2001 From: richnamk Date: Wed, 15 Nov 2017 13:32:12 -0600 Subject: [PATCH 01/18] everyDayImHustlin --- richardN/mySqlQueries/friendships/Untitled | 26 ++++++++++++++++++ .../mySqlQueries/friendships/friendships.mwb | Bin 0 -> 9700 bytes .../friendships/friendships.mwb 2.mwb | Bin 0 -> 9771 bytes .../friendships/friendships.mwb.mwb | Bin 0 -> 9706 bytes .../friendships/friendshipsQuery.sql | 26 ++++++++++++++++++ 5 files changed, 52 insertions(+) create mode 100644 richardN/mySqlQueries/friendships/Untitled create mode 100644 richardN/mySqlQueries/friendships/friendships.mwb create mode 100644 richardN/mySqlQueries/friendships/friendships.mwb 2.mwb create mode 100644 richardN/mySqlQueries/friendships/friendships.mwb.mwb create mode 100644 richardN/mySqlQueries/friendships/friendshipsQuery.sql diff --git a/richardN/mySqlQueries/friendships/Untitled b/richardN/mySqlQueries/friendships/Untitled new file mode 100644 index 0000000..b96d779 --- /dev/null +++ b/richardN/mySqlQueries/friendships/Untitled @@ -0,0 +1,26 @@ +INSERT INTO users (first_name, last_name, created_at, updated_at) +VALUES ('Chris','Baker', NOW(), NOW() ); + +INSERT INTO users (first_name, last_name, created_at, updated_at) +VALUES ('Dianna','Smith', NOW(), NOW() ); + +INSERT INTO users (first_name, last_name, created_at, updated_at) +VALUES ('James','Johnson', NOW(), NOW() ); + +INSERT INTO users (first_name, last_name, created_at, updated_at) +VALUES ('Jessica','Davidson', NOW(), NOW() ); + +INSERT INTO friendships (users_id, friend_id) +VALUES(1,4); + +INSERT INTO friendships (users_id, friend_id) +VALUES(2,1); + +INSERT INTO friendships (users_id, friend_id) +VALUES(3,4); + + +SELECT users.first_name, users.last_name, users1.first_name AS friend_first_name, users1.last_name AS friend_last_name FROM users +LEFT JOIN friendships ON users.id = friendships.users_id +LEFT JOIN users AS users1 ON friendships.friend_id = users1.id +ORDER BY friend_last_name; diff --git a/richardN/mySqlQueries/friendships/friendships.mwb b/richardN/mySqlQueries/friendships/friendships.mwb new file mode 100644 index 0000000000000000000000000000000000000000..7d9173ff96e5a9ffc15dc29a8f182f7ad1684031 GIT binary patch literal 9700 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 AtN;K2 literal 0 HcmV?d00001 diff --git a/richardN/mySqlQueries/friendships/friendships.mwb.mwb b/richardN/mySqlQueries/friendships/friendships.mwb.mwb new file mode 100644 index 0000000000000000000000000000000000000000..1cfa9ecd1ecd142933aeb07e2825bd4b652ff442 GIT binary patch literal 9706 zcmZ{KWl$YJvn76Uw~Kp#00Dx#ySqEV-QC^YA-KDH&`Z$3#U;4A2VcJ0s(o)??auU6 zSIzYKF*V&ar@C8778(W{0s;aaLQmg8mi^53S%?q<0*@aO0{wH>%)!*n&fMOW$&#V~EC`m=kDxZkF+07tWR#F#J}G9N#2h${4*nbhS>V? zsgAiO12#a<5xxGHQ=`_&hI{R*_owfNYt8+nmv5BP_1@N)`WJo*&(TjgQrdm}KtQn>zU20i(QH95${X&quO!5h z2ZN9_M9>fv9t_E0z9iMXo!0NsKoewyB|(GAHN!`|lEc))+>L8@mML&d5egEpT#Pfz zg*W>9lufFfGb7Gb17Mytnj{t$_ zFPb^nhpO2D+I$85SKdWW0yV{*{jX~1hL%SsHl!YC+L36?oP}71Eq?w93-?QoDwdDA z`wJExMO9`{Iy9M?27iB4b7(j>`f3SGJbVSgEh=`PpBkhOP)LSSg3iEYUkt>wdV zr7@xL*>xAKx~~XHRVNG+e{u6XencH@U+I?w)U{#Q1-OuOI5yaSF1+vlxqSryd z@V0HChGqiN_~3~i5L#`3(#{47o0a?V8~aQ{L0b{{Z^{+#fAR$`)^o zm7#ret)gOwU;)}*#cwkw-Gp(I$$H1jz#?oUQlUs9AuFLE>|BW0$_Dag&%m?spn--j zR-xCF9E*|UDsaP&*^@V(H%44@X_5)yri|bGOyV;lZ08SzGL;bTFSFX7sF7B7+Bnc? zB=%~2d1Tf5g@%jvlXJRBr|*Zl_~@`GUEF!4Y1(CLW)3`BxtUp54~-pKu*D4YEEHo) zl6skra1O>JPnWsSe;um4C`Z5vi6}y8c5#51!0_Tja&4pG2QP=fd(T?( z;ZOT1V@8Zop3Znoj9SZrp=*SK_=vydXhU*hf9(EF&bpzg#uol=sjI|DTyglX?~qxD z7S+|P#?(xjADPb{VJ)c70ifU($Rw3OF1*;#tWmPfpcqf1Ts1B|NWMz8G-XPtA8v)e zPtULVB(1)uX_M)#QEu#v6xG2aFa^G9T;*$BA;^=FC~koF%(<%wRtVUhdCfVdjo*2- z(VE8RL01cL^n_v zy|gkrcpR91US1i!V?yyaU#yJMO1=E4jV@W^uGy21xDv#yExLNHA#3ZGh1dxK#0*=r`eoBsC_RB&msDx}BzG&bYX{8q8LJ(4qo6z=ZX zI26O-$$}U+Aa18}3D5ZRl+scbl??6fEEp3Zl#!}|S#oR;(?{Vde^w-%x5d-NlKjO1 z!07%}ky_^nDGg-m#^P!9>rb8J?OZ?n?M0+=!6I)kvK+Ih7>`hLAQXKk0H)CnU1;Xo z*YMwP(It>|{=#%*Ed-g`Be5|gHa(Fg=OIp5!cV6jjrGL8D}W6?CF+Mt_5RB1weeS0 zB*iTbr|q@Mg@-(wH!y9_oBYN*Wt__bjo^S-l~iI0J&6Jvq3mbm7{w7*ACx)-W)w>s zZZPogl#oh}3snsVTVnWOY^$ zP^q{TIy*g{wRpKJIR6*bTyMpP3SMKfGIP1V7zWv5e)ud}xn7#IWc&7{K%5skwNS92 zIw+)^*4Wvkp)Smd>8k$?8*G>6zPFMj%XdBcCAP8m;G0xL9cG2EpSGxhhjhVKKHpXl? zdNr6QHCffeJW^%r3`#X!o=&S_p@KkMA63)@nv`LeRWMy^H_f+%S4@t^1d6zbp>D>+ zr`Njp5A8U|=^O3(pm;t@@0@+>^``4i0>zY;*xFS(%RVYcTxzh!SE3k8_51!wot)pV z-=h|#ry#>4p+g~xeBj^Zv{XyUnl9p3y?by--!>*3S!)hvteF~}56?4xSKR+(#3gp) zOLZH-BlgGLw(X~ft8F%|M`^)+b}yW&E8VU9&R*3#+NJDz8erL)BSQvC7C^Y0G^|ER z(}Mz0V8d|S5ykS6Grstpm7UxdaW>|ROXOR02O)*(o~gV05pva~3N`&2hz||+df@#l zk5f2s0llyLA_O$wCpx~mdBtxO_bLed{q<@2tL=*RS;K!aq z`jcy7vmWlTqcGmFW#LiDF%RFkMB$PNhC-IXw5F}f3bjLW_(*8tZ5|aNkUuDKHo^=5 zbU>8Rmny`RXr3mF2(TSb_d69TmepX`83kB5ZG zCcV!v^Jh02jsqIa@`dOKDhJP0 zJ|#NKDjA7JKt}5$5`pdm@yLRx5vatPAjN8_*21t*T%>n5zM#>%TIzjUs;}GAn3_W; zs8t?E&-y+J>fX-IHh=7OIfuKOWjNx z%GBiL3rIug+8J_I(%tuxJ;N?6K_XNznTnCy3tQDmRUNx&|W2iLq-fC#YIt zhyi|5Az?ctauBYorrZQ`mAheifU(+n-+Hg;LVI+T6<*^dEzV1$SyUNiN-7#v1PFt^U`vRK(Ak|g>l52hz;#I69f_)7f8?FV!Jk$ zMm#FIMfG=2hw5?NXV-=|^phq&pM z`AT_R*X-Zux59LvpK!}xcs!jPfnxhsfZ|7naT5p%5kjAE zE|siq{#6wD9q!scZ@&;ywCtHkf3*1BYUR4%q_?ZPqrdF>(X%A{Uq_zr{xOIEgy;%P- z_PZNdN&(a?-GNo#VE1o0_~Tfv;?|@KN(Mu1?XVDiGf#)|Hhb*fK*hdxUQmyE%+^{g|u*? z(=T+Jn4OeG-vs>-&b7f9B&skaI6UL)(d%2m0pp2TWq^ zjj%Y#cNeF8|7a2Kz6BR67QBKvp_|cIta_{r@b26!~*K0 z+>XI{98(n*zAYEF?Nh@WO+t6^P)qiD9k)OYY^yC%yu`tn)k2JgsmtA@^2vy(%P?Fq z6`Oc}0o34c*|1&&v8xRf87YRJ5t*;ZZCk5mKWpPgMSrKE7uQ?+2S0cBQT z_E}ZBozNa|GzSgb*`=HEbdmOj2ZiO8jyCD2gHk}OwIlaTIphQ@r=y!!S5?(% z7mjh$6j41)HtuO^;oT5@6?WboB;{^lDES(K={$YKsJe7`3;0n^8%6)z}ENRy0 zn-%Y;s+B0GWHUci@-IpJ+7douw>}2jba05?wtYy|%A*(9pPy5$&#N}SSExC@jtDqZ z%ZTef2f0c2hyYsM7aqA^!5I#xx0TjbDgQE8ONy~uVhXBuzpUaOyPDn^FCg>_xUJqv zUjgrqg&h9a{%~>6XFigf0(kV)ycO6_4fOYjqSqO!WzLll zZht7Bjqi_e!naSGMe>Eya*GwiIEc)3*+~a>|n%*oqFnS%Xs!^G)n?v?4 z{FLfsl;C^a(?Djh$%BvBaelexhPJ(^ZQMc8nUuv#g?)(6GN#eMC z{0K1m)&{O2E!HMgEgp617gX67h}g&uzGe@bk<9lvv%w@)?WAdLl-ad>JYRlo-%W8S zcmq>Dnx3SQ^yMjJEz!yEnx23+fc*7})r;p9UT|sjgJ%zPs^T_l`~g#^D6J{-FL^2Q zn#pp_DD1mS2s<7dHGB^p40-3wYnXFTgXB6;$t%BTpddG$Y!P5VxQO&PSrNuk>H(Eu zn|NZJS}SkwOMe+i?iGLR8nD1Y*m3?zt8L!yPj+2NWw!<@Ug+w`>y%lS49YRCVJ??A zmDxF@*RCCP%U|P}s&71Kr}fRQK;=A~*q`3)+yzQ7Ub_FYw_I1zVG3S9z=RUhL$v&F zDHv(LYqRdxlqHAcc{A2cKBwfp?R8BFE9X3vWGX{Ri-qDV$oMW|H%_8Mzy&d(;y>># zlPW!eO%)G+O6VnN?*-MAqZ=b{ubdHOE}p9$$IS3ubH>Q0jUk5TbANlRji+stTyivW zA#vp!nS@df04*d2jMwmfu1WvgrExH&9765kaglOz@yZb@*O4 z@y_RPk!&d~ffhTwj%4pZl?zB+9i}Tik;+o>s3kSov|goqiYUT7CxS3=XCZPOlZL`f zFD<0g8?dYTP6a2PMCE07!bqv(`13PFZ==4MIS?Ztq3elt5)Y1mWJ?*S!5#SQ2xQg!AiWh|>vvE?atIII59sE^&0AD@Z@~{W*xx5CZ#D5Ej%=I|@X)D>K)8#3svAN4|5$9T0a{0EOIfF@CdH+8jeKBgGEouNDP4VpaaL29`07rA#? z2oQ;iTn`5KZ{a*@sXMJYpp>BQ@=hJM^qQt$m75p4R+kP_%jQwg~++*;hNX zDV#as2^-gRU}lKjjY zj3ZV|h2?z#i_9t6r{85SE;$MIuM1KElrr%vIYT9LG&b-8hy*Syd8$>nGPH>B|?T0e0uW?2_uKGVx<`3m2{@xvusLc1}Wh zQ~l~SjoSAVs@)<<8v=o;KUD?K>=9WnE%m&7A6ELfy5>4@%pi4>km?;MF0-Bul$*FwAFEH zB%0Y4zUc_qhSe|7FHq7xhI%?l&kNbjw^dGTD_4}pVk*Mt9&MG4418WMGQxs1V}4H+;o$; zx}(bn97-?RE)=DA-@6A)>D7O94seEokApJAnkf(tELo)v$QVlZjbgNZ;Soet0vh8t zq2YX`EuDOOPGe4}vkboNK|Ks_WFW{lHhG{C>2ghci!sjxcPu|HZ1N(2G^JH?H5v@~ z7U*ohoOsvktyXQcWQtABfWRs6$QS^E67)6EBa7%9WjbOoJx)`^^-S!1d6Tiam0z`0 z_N0aW$Y^q}Swn_lRqx2qs@R3QcpoE61TODOT2&DiaQ>Wr}$+2QuEk7f^ zPR)zJQQ9{sNEQf~Z=*_##|sQpmd1BUGFLy;yYV0H-1Fros80PV-jN-GTQ=mmL**q< z(5-A;J1tRYv}^*8#DF28HKTw~68mQdRfbqu-FJNXwQAQn?KjUKHjNMMRA&Z;V2osy z4;b$G1bDo3w-1`-Bl+^%u;xS01+PY!duW3@$6bwUpcyx0K8;m=xYJ*??Zc|_+Wl95 z&9l1;e{)pt4PM%Uj2z=3Ng$Jr3!u0`E{of8zHz+bW?$apdxA&CXA$NMDDVpYfL8iH z)iz*-z3fE+6D;7f$_D$nU_O_vgQ?B;@0{%B5D@>jVO_p4CKJM^g%|_`(x(zKGx=s_ z>}t$pW^%40>p-OmtabM~8xF~WNvs(|r01Z;+DCeP8;gEPg-6JmlnXZtDgO>GZp2?3 zaHlcO0vLnpBVlykAuxTGF|Pqy5QL#dSh%^?KCJqt=!`+0o$(tBZq?Jh`fi49(;la* z)!)uZX1aI*5kBBu1&-<|vpL`1)9fOz`SYSpy}SS)SAL(DLwf0!^0gS#gp^E)oWi1z+%T1i8h1_$ zvIV<7cF> zr>U>Cm;Y%X%uBS#-~4cVL38eSY5XUTBAR;+q1eWKcemsQpRC8JBL{!}#>L-P|HtuJ z+mF$U+3UO2H9tw**iLTVJQaJ>7ZK3>tsdWI!C8m5@C#nY#=7SZm*Sk=_lvWJ0-f2C~}ABEY?QKC~aR-!Bb(?n^Hq;VkTDF3u)z^SE8E7OywCT~3W09NGe2 zIc2(??+L#}R6DqCGB~&v=wA&|3v#)7x$Lsm*4TxeOE-51_&i+9K3)`xxR*JQl1_qo z>rK&Z1>&bhc{onrD)ekPUxL=(s|G$IF(}`^T}_(3Rniz+IC#7A@$zMF+NiL za|Ku6Sx8EDx0iW&2RuH^4!mdR^!`=B56$dLwy%Pt2c!KA2Yv3CE*}jBnF*bw z`LW!po-Ewd$%{5Be|24xvVU_;WvNQgk*06+aS*vom~nqU@Kjzw{8I58%92Denk%kQ zpNoP}Krl}s2)nC>nQwwh1f63%xuDc&;j5&so^@|D2^_5wd5TAhwc5pcBEt4k&cc&J zIv)J#JE4w~t-OV5T4yrtDDx%SKpL0r03{vwDQP7$Eg9SEE)zPl96gW1yf&^+Bd1qu zPZ!AYCMC*~>K~pKYjPhS9p7U#DlOMMKr~beYAKYuyRAa(3wEFgQ;Gh?h=a}1v6+}^ zYNT%S{EVFW-BxaxT9Mt%w2APl7u;nz74?`_f?38p6HLwrFTy?;dNMqi>$JN^ceh>o zabAx8Z*@lzUxBW$6~_Wro_5xJmP;G{Qb{``8nGg}2C+`0sEBF;TZ}_3Y*@Sy7)&1$ zU#OjqlMsq&4N2<9L#0bgSIP<}iGIDk=jYY@rro^gzuqQj_p$t5_U85y^RTOo6Nlf( z*429d45_jzk?q%{UD;CyF~s_}`;?-;W! z`mq}i*Q+`v%AKXLDG~qe)1eQSKW6Sf60*}g8lH{>-EeFY^7@KhEc}>m1)f*+4#FlW zW5m%@nCr*ADlV&_aK6R0O~TOrH0Q#LV0Fl1urSMi7{}`{3J!{B)a1b`$qvT_%h}NQ zxr!=I7E%Gn+cgGLOVobj!4FR&nRfk}2L;)ND8!V~qv1vvR^%s{7LxHc(VqD_`p~g3O%4TZfBR96+lVW$XyPrkV!YzB)q$# zI3hdA7C2p6*riJ|0dzaWiIMZEXhkG1#e}innoDZVrpxN(@JFwmT3kSnp}CYLg8Ma=EJ2L`Wo{o97Ete6i&Gn#{3YWzJO)Kqc2Jmfp;n zZ%W5)JthJPhRzW(Fc)4Sz@zv|JwHG|W>yiq?!>yfZ!l9_)Y7cha)%l`hs$3!7oJC>}TJYh80d3 z*4!BsLX%I2BrJmeymwC$CJxRY({0`)th(V$0`YrmODb7pVQuHP6D&Sx`Zi0^xdD7! zCYiR7u$=MP0`;0uTjr`d!y~7~AyA?G*5DtDui%CYKlbeRtmXWBgqPME{oVrifx;C(&N-i$Fd?)Zsd zdTmq=O8c6yu7T(3<83FC(eZl0Wmyfx_S!jLQi{3qwbGZk=c9bf{Y4W_dV13X`)Y8O zMLhQKL{CkRT2PNvew9m)*}kcs>R`-#T1o;}Kl*PYSBK%m%OjFse_xEQI*WR=9>NZf z#HlInIK%Rm3t{8)S0!0UC Date: Wed, 15 Nov 2017 13:34:34 -0600 Subject: [PATCH 02/18] nameChange --- richardN/mySqlQueries/friendships/{Untitled => queryCommands} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename richardN/mySqlQueries/friendships/{Untitled => queryCommands} (100%) diff --git a/richardN/mySqlQueries/friendships/Untitled b/richardN/mySqlQueries/friendships/queryCommands similarity index 100% rename from richardN/mySqlQueries/friendships/Untitled rename to richardN/mySqlQueries/friendships/queryCommands From ff52d8bd10e9b5fd38ecc19ea22ef62a0fc0b596 Mon Sep 17 00:00:00 2001 From: richnamk Date: Wed, 15 Nov 2017 17:50:46 -0600 Subject: [PATCH 03/18] iHateSQLworkbench --- richardN/sqlFlask/friends/friends.mwb | Bin 0 -> 6528 bytes richardN/sqlFlask/friends/friends.mwb.mwb | Bin 0 -> 6497 bytes richardN/sqlFlask/friends/friends.py | 59 ++++++++++++++++++ richardN/sqlFlask/friends/mySqlConnection.py | 40 ++++++++++++ .../sqlFlask/friends/templates/page1.html | 45 +++++++++++++ 5 files changed, 144 insertions(+) create mode 100644 richardN/sqlFlask/friends/friends.mwb create mode 100644 richardN/sqlFlask/friends/friends.mwb.mwb create mode 100644 richardN/sqlFlask/friends/friends.py create mode 100644 richardN/sqlFlask/friends/mySqlConnection.py create mode 100644 richardN/sqlFlask/friends/templates/page1.html diff --git a/richardN/sqlFlask/friends/friends.mwb b/richardN/sqlFlask/friends/friends.mwb new file mode 100644 index 0000000000000000000000000000000000000000..5a0fc6628d7dd09652709487a0c4badfc4536cbd GIT binary patch literal 6528 zcmZ{pRZtv2v~95e4KybLZAMahM z_qyxUuI@VfZ}ms-qoIO`L;wc|hYFVz>#CAOIuu%8*5c$%IGldc`D-LcB0ru-6=gDSBlJuP7? z0~Edlw%V&23bkAe@0UwehwyOL&| zc8I&FEFb!1vXL9(6ys|LCv=_z?yvTr-_)>P^KA8jsYqW?sOK~WVonAQ!>FiUyxcBd zbE&5WdVd&-K5HWlZp(bMZY+e0lS;*|{i1_Bxx*NPqIrKp+lyfwWnr$7fC%nDCBY$= zK4?iWMG~1Ejn{Ewji?F|e7MC4IfyOX9^r=GweHfW4Qu`$j+6^k7WBdw?XW%Rxy3;J zc5Y#AG!GYbLM4ktKimRdA<_IyyRGG?zq7y8|L#cSkBA-nW|vyRspAT=L&ykgn)CkY zkS1pi=4@$-CA@EET~J2}yV_ndUueT`y02S*VlG-5r27cbEp)oRgDHMp)8z@zO8f9v zGzDTam4zWwznm&tC)}w)b4|syKMs3}0!rm1oy6XN5Bn^nT(3<*Z`(6Zz6;dfU&WKs zs+@;lwCs|A{3$cPJjJ18h{45^FXPpx%$n}MGH>$mWLlt4hCykPj{v--f|t^!OOf%D zDZOH-9i2w+z|A$2*90VAc|U+ zTX9GFT?=@NA1-5~Ei{!Oa>j0Y=$xQuB>MRZRClQhj_*`xNB9 zmV$zyYrpp+Ky+Nzz|wNXV|3y;2K}K9O&zbNN&4IGBPONvT*mbSSZ6s!lq@_7@hkVo z_r)x=Fch`fF*D*DWnXU!ds=)?8el83wMj;M_ITyZ#{?eo@!wb{yY@Y_P$&uA6Ji$sMqb0~zjp_M>feXg%Z?*_dt4XJ2=erN^5saTNAUtx%vo0oMp(p}) zY}Bm%o}GFw#93))Q9I%7&I8Xr(~#UE3U_A20$_7=u#4OYV1e^=C4bTj@3!+?37P0N zU4Hvkg*$=lpj|f^{|ya`{3{1%2v?}9!oD8I34ao7&XB_Ou4+PgO;WtQ|DNUVFi6*Z z9Gp>5KKKPL+k@??+IY zF6TGex6NQ?!gc0G({4l!Xokg&itBj^Za(yIzZb(-+^x$2`cOCt_6|Dltc~d@Sl5YT z;|&0$3z@YY?L~W}JqS)6eidi?N4tvqXf)=Rr`V#2+w4 zv`p;UG-UdKwgK!%&$UTY-VL<(vzVsglEnoLEX`=s%Th7+<_^S`7i?W9NhmR-&tgp- zBqxie8n$(9Fxg&|FA5vDU?|py!gAXle2EB)fr;?L@4*;9`0;0iQ=K^I7ms_R+jOTA z;^Uil83?w%&~l@dNVBl`8sJoe(a`oYgh@11mf!*SmR#XaYT?{$WR^PPG zsayKcICVx#8%i&LlXC$!v~!>IT@m}?KE7Cl{v#^Q4(i$ zcHF}$d-6U<(_yPN=Z^9+@K*?j5;^-aJ21b(=-{mUoy{%qWEc6e8x|C$OZ;2Vuf?N6|`HF5H& zT|btZcK@Jg(Pmb=+V>c1XvCWbWH7Ell40H2q=rjGR4r}3zGJTPdnYZ|-A-DOB|w%a zak$F+^Wbxh(zD@|+hoE@-KWHLhk$fq%h~#?PuZ$--^Z#uNbTzx+^9bPF4P5P5&*$Sdi+)Ga&IxWyUJ+P z5m9#&$WTM9`sE}Oz z0dm0<@^J+lEboQrCK5CZ8*FgCV}!nbRrBzMx8p4xi=_pTR*L!ykP_?e!q3|JRhMU| z$e`($>?>hDq95nyR&p|`}F z%5>iD5YaWqap##mSdAcmA8+fbbXE#>SWe8$I^mOB9&9xze==3of!rY z_C~$;l>~&>Vc`H2w_HtP(He9C75IV2olzPek{>v+pR&bjT;RtWL<*;Od)#o5OwxBj zs)dOrPq)BR)NYB`jp@sAyWt;hYptHvD6K7lA5%6N5Pm8vQiE%;W*Lj@o2Uh(0HtCO zreV8$bnf|5AdfX--MVIN1Q`}s~LTifXtIFrfFje13{cE zId1j=s=IviqJ&KtY70QD13>L#wpYJ;2ZD@FL_5ofX^b<6P*l+~gSa4|`5A2m2a?1E zT=K!n+IYR}N$akv_-s_VN=><=wSVplI&{H67WxFpM z14+fGfsKCIUbMTYjt%3n;sj$wiaD#ur@gG)a5g6W?pAw+h_TPs#c3H0oSUdN+tqvQ zT+gFA0unZPlnGvR?`>#3A<+JP^Q>TP8ya{2Xt&G&sB)|A$_RE8Z~dUqF2CmYIgjDf z2jpgG!~q8j#$(x(Q6sJH#z&4)3b|Nc#l;MHx%0DH!l7_mF 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 literal 0 HcmV?d00001 diff --git a/richardN/sqlFlask/friends/friends.mwb.mwb b/richardN/sqlFlask/friends/friends.mwb.mwb new file mode 100644 index 0000000000000000000000000000000000000000..89fe84b0bd7d1361da17f2770823d40477adbdaa GIT binary patch literal 6497 zcmZ`;WmFVUwRm z#d`1Fb=JA-th4{^`(y8|sfzl77zqgp14${`RW-}PyRw)B38`=$2?_u26y$2-l&Zr)Ve?ia%uLj*xrfnspSc-{hIuYk*J+;pL}T!R&iJuYZs+JIdisN@A1`>%+)pjD ze{Cu%i=1C*L>nUDv`UDTh@rb1gv+QTRnCSPVsoUoJLSrM*yj0giyzb1vxPezXBa-i zgN{xU>^l=rGakp(FWHhyLk;p1x%9vfAUeOWW3#p7k#P6Lf0>I%qE=h3i9^mSAccdD z{E`>7&F}S##0#oBZ{@V6G*)%wA4Q9TRdCdkpd_=!Fix9%U&-s1#}!m@SM$De-Mao(rJ8IE+Xz( zrZl}H(=a?>0#1UyqDQF;Zim{YZe#VAF$;Qv-&)dJBlUUW0vupcWX}wEebbGQVk-dU z+ie?!)Tc~4O;pSYx18|{zy?6E?ayK8I|r|s8Zk4$1#o33Gb%A+D&y>~7;9y_wifR# zr@L0y*J3eN;ab+#dAsXq)$_V?^){R_)Ad2+56wjnPEYfOsIOC7ucBt^=q|Q>{tPP{ z-yO-A!>gNcfgnrVkJD8s1Z48uzrb?7-;~QE<=vteAoEMKR9f-u{41#hzLMYfMkX*5 zhwc^%$Mf{%$iESmL}EoNy7|C?I`N>8UX_9sMss!@2@n)Gov=!(jU8wC)0#b~MC_rDHK1;M?=2hzv>(z8+PV zeHHrQ=R^UbdHeKaU|ndeEq>?NiBx{=5w-z7)Gu^qm5A+t=;*9hP}sd!mRQ2~s&Hz+ z5XrN-vmbq|*^l=j`y8W|Da6)Q5yu!3M4(1RVncz z^p84=y(M@vhGHkTzWU(w=hcTWVr9Mq4Nck+nXfN?Fj+Vp#wj_HL9=Jp%;V5@1TTls z&0u@$IS{IumGJ%H%RrW3;490S;$7kEudt4q1+NmlMLizEiTIr%4d{Qx!$tY0b;XLf z#OSH>w)1_AAg45DAB9J#i!3_+oIt2DE>TMqOvF%(qvX!ph@KpGL0q-tZ7RNkO+e~$ zy&PHU#}0Aj1{TaumJ5RgsQJsxr~~pMfV>iv{pHLAf`%l=POD@~jNi)Jjh`cgR#OIY z7)Aa*Hs)mC_`9)r^U~v3ex;QH$o5F-B1a{V6urZ-hIUx_OF2o-ULEcu*BbE8Hspr0 z9!Mj${Dk3~ic=H#M&u8t$qbq5y^`Q-VNw+=O7n3G8ZW|nx4;VE_y$)Mq^1&A>9fxb zNB4sd#jlPr5!BbJ66=h+aA8shPKL!pdEh#1aWE}!3_^LfW{VLYKD|enD#jU+dW1<* zNig_5B)tt!=`%Pzmaaz~Aj9q@5K)oF#F2#SRp1xxY{xi{H0qE-8YkV>FzK&Qvi1?y z<`yLDBmcsU3j=3v26;ZC3gAQtogEd_u7&mFZ@bP^1l0n|d)#X$xkpoo%9=&&eq9QK z%al>?S8FUr6~(wnJJ8~m6oLBNPJ2~&6@|953PeMzdZA|Vi_o|IDDdv6$an3#yxYNc zUv8Jk;1(SkiE!reZ*uh6B)E&6Ycou^E5o6Fhq(Q$09aq&;?ltc^0uFfN`X%3YR<@6hQyiWv5Hz0=PyTy)`>Z3Rmyse-+2LsAAXtQjVSMr}S&({iR}3 zL7GU&-BEtfP4G%is(#ayOq2&lTcgq9k68}o%jqR8h14I62i_tM$+}{b8Kswo#y>B_ z*;>sX=dn?b97u1@Z=vy((IM2#N-1xe*XdRUZR%EP!sm3swcKSwZSEk~(kZEiAl6wwcE9Yql#PYAM1YQ?mHN+p8`F4mB?V$6k6us8OT2078CIBS z=iEz4h~&8gWfs}GEa2wdY4=3ts)>Gba!4xyVxl0lk5EqX%T zZem~#UG;Qz;`DLOXRpN^nW1bXr2y=DV$U=;j~wkoe7<|2gEB$#YG5~jml&l zcOJ=bqiuI#4;_*FXL=^w$5$;P@_&2n3Ua;P0d+?r?D9QpZ<>SR472j5jU;B9mx|6c z!E}cY>DXnyGd_||^o`ErU{an{!>Eg<+I&A#@Dd8Hbr1J*?mAk3TR|XY_lV2B!_X=G z>IYR_H0v^5r;Cs@;;I) ze~H{39(8G9R!mO2vtm`8KTZUs=!)AXSKk75h1@~ARwdTTmV129B2e_33`(sXI{hTZ zj|n=H-)zxdN7%||oSzvNi0T-r3$v|jY9q2r2eldRUZ;L1g0W+sB3xL3-(vR298DNw zR8nHd#u)TD3Cc6&4CDxH%L#3jVLO2M&MS587PxXM`fM^+iKRW_a>z4z1Y0ODd@tsh_yJ%*LqN#kfrdc5}_z^-T-wO?FqYe^+S&Xkn!rt8lBM z(l-Sa+A;(_)d&Xm(^w4*A%cQjp4RUSi_x{QRRIQkIM@z7o;3`dR>W`IfmDF6<#OrD zyy+&+n7`1ei=@ZGp|JvuvOGJN@ch;t#N%mrw~vWRE1i=B#LMb&?47_W&Iy^)3h%Gl zcWCVscwSgEuUS~?3^a~S(-*ull!$IB-{hV0k3POtfJ8182=T|7Pn zu(9(a%T$Bemuf?+tCt<-{`S$+6i*z>nl2#Zh z4hC0ZnG3Vrs}mvpbxvRNd={i(7` zHOZ_=vU;>UUwoVZ0FLPsg;*iDW5t5}8zOtX1bb7HegeA*Q{35?c)Q$FiITzIlNPum zf-xAbNg(+=OVlB0$4hQeg_ZyqY1&g`k2+B>5ZbgOwQvlq#jw6o z+bLx@{%jyqi|^P}nAOA2g^R!M5b_QK1xWG;tdzojx42fa+-Dqm^TgUzveo>p33AZD z^F9vCh3lq{wNv?pf4J-b!}x7hp(hWjMGgaVG$)~YW0Kv4-GtO6;`8rzANpWuQowwhI z#kx(knm=<76O*S2*C!;O&539N!ygR^1U6 zkX*DtCAlU&pW5#v`nvuZYu#(1Xq1DJf3Lajj81EQU6ctcKG~PE9#*g$rS%NcjVL9SP*P|oUmr|+Tg*a z*;cDs?#|T(R>`oViK-j#+gXuI%{}Y5?4qQ)7VSPU`96pKwPj_sLcLv0(3TX{e*stX z!~VuwWkS7#g9Dsbil(8_RYT~9{^dEjQypb9tve?7xoaXPmpVIZK7R(Am(-_4+r%Uu zrp{M(H>ZPrD8anlAKo4Cw$Xc77C&GFz88k@Y%mZm^Uoz`0(TQx`SGhl?Q> zISq+O2&g|rZ9Vr@m$@ef`yBhkmRoy%>JZahNVpeAE?Q6F`EF~#N@6=A`aSsx1y%Q? z>{Mr2?O}6Lew>&QifzsZUeSW1 zpJOX~;hXUum$#Kq)U`Lrb=D;7s*#32w5wUdmy0hSY&AX_J-^+65U(*D?a>|u(mN2o zlpYuh#CzaHJFvkj9cl{P#vnK)GCg*$wJ8CxERn*2kQ&0_%ssydbXDRfLyRBWwl@zJ(e(hVNxKv) zE7TBg(f!p$qtir2Gt%NJm8kPTSG8@*{?v##^!e$IpgJ=TjtW{fLT@7l0l#l<HOw7Z}`fRF-kydeFX2;C)7LI_3&OpyAz2g08XR$ngUP~ zqdX-{PB@j}`*=+%V?o(Z#(}_-kBJep;E)mT;)*w%Du^R>+ONK~`*>y%!O-Z-2G2Q{Ko^r!-z~#PqP)-oSq1oG za6~Mzz7FfW7qsjJ-HhW5E8#hn6?rie-J?2T(8*%5B62vjZNCI=dBK0Moc zxUwzls&p9es+vKH-;%=I(dc7s2{;y}B||)u6841vxWqcA3v+Q@d!IjAEw^$Y)=dgA zKgEv!^f@7(2hU|$Mf+wU7Z~SZG=9>$LPS^io3Gg<)WqPhTBp1_8Kga5R%yZU~?&+%fSFR$A7j8L_qk077g zX91uBJbVosChyx>SqpD(6>5s$OGx4W>0J7L2?VXL<>up*af8^mV}3krqla4)s0+U|8Yr%Y?Wc+e{+UBxJm%A!@NjiI_;mVdWwHXM zG?iOiemi|(TN;`M6U|pdb`G)&_9E84pIt0ZGyg`IseCtWX&bRx(>+D^lYNaI zgpF)%jc1v%C_@(aqNJOyDmvsh_v1GyzXVQvmygqZAJiV9qto7REbR#oU**E~P)7ZKKAU1d1PGs)sSd~oc$jJ_k*43Z!>zt5ZAIGvndVY$?# zALwt&FVd)zo)16Wp-p*cr8(jGEx473@>8|I*oC#ENvA){gr2a*v$;T`HLlO8jJF)a zBpZtb7MTnL;l_4sGV8+e6O2=PubJr%{U>p}Vi&d($j9*&41Z3??su>k`G%>@#5VYG zv{45h79GQ2sB|`ul2ClyBUl)LwHgA`L9;`fUz+O1BCM**Q{psGaCH?is*R1Gjg zrW^6@BbOz}_2o{q_2AYGP$j2|hC-5E# z=|4A7iZ6dDp!{9=>-=K>ZBig>9*~u%6*tKGBy~z-4M03ZwW?LFUHk)odz(Rxd?n#B zj>y|ubuK+bTTr+-U!XvHu8tAl{UcG*b?K3y{j`DVS47|H<8%v<;%+$R5z#f}?~X{O zq&`l-!ksEH$|RnC3A8k_M3+I58Z!l+h0nT-uaMq~a@AblI+mVKya;-!>bFyP@I-K$ z`lbq6$Z+)7prk$|5?e!??f)?#KQ8@9d!TqIiM9_SGx{<5@d2D^WpI%bAh+>90SiHEI4v5l$)h=(SR<##8XD1$roHaPB+$e)(6M1NuQy-mphz#JMnD5O zZp9cIzGUmA(}H)Hzth#~Ly-%#yC_AL&K4HjmJqNXMbb(8aUitO)nLrw=(rfIxDYP9 zk$BS{0IxJLUY=ZGJZ>Ne>%7#$tH2i?_SD{|6AMJWaToXF9gX{WRwp)0Y}2hB%{MZ= z-b`m_65#?>S6Xf&aw7URXMWmXHMpSEoxq|DQ!Qjk49IHEiDOiq^>tc&UhxR@t-*FR zI>Wg(G97%}&M+qqKEo-ohp`O0>aU$j1WvZIoMniG`e05Ke-Le)v3JcY-X-a>3!MR# zeY-TUsi%Xu8>w-K<~ZA_*@f4oW__(odXpPsFCZZBjCQ2&ND^U}#O#+}Z<=_W7oxFc zBnX5b54!C*7+gQ2rR(eHT;hX;^sBNinnzEc`z(Thz=?3UsHQ6NUwZxjX~SR6{oDEP z?BUg8vKg_!seSbk|fx`{#E-Lj8No|8^&GBqTv3pr4MG z8m)n=yQ8(Oiw&3-=nArRqP23j0o!}q((-Zxu$=!n;qtHn+d5l$h|oIwfvmCq0VLj3 AyZ`_I literal 0 HcmV?d00001 diff --git a/richardN/sqlFlask/friends/friends.py b/richardN/sqlFlask/friends/friends.py new file mode 100644 index 0000000..032b460 --- /dev/null +++ b/richardN/sqlFlask/friends/friends.py @@ -0,0 +1,59 @@ + +from flask import Flask, render_template, redirect, request, flash +from mySqlConnection import MySQLConnector +import re +import sys + +def log(obj): + print(obj) + +NAME_REGEX = re.compile(r'^[a-zA-Z-]+$') + +app = Flask(__name__) +app.secret_key="whoDoYouThinkYouArelookingInHere" + +mysql = MySQLConnector(app, 'mydb') + +@app.route("/") +def index(): + query = "SELECT * FROM friends" + data = mysql.query_db(query) + return render_template("page1.html", data=data) + +@app.route('/process', methods=["POST"]) +def process(): + log(request.form) + error = False + if len(request.form['first_name']) == 0: + flash("enter a first name") + error = True + if not NAME_REGEX.match(request.form['first_name']): + flash("name is invalid") + error = True + if len(request.form['last_name']) == 0: + flash("enter a last name") + error = True + if not NAME_REGEX.match(request.form['last_name']): + flash("name is invalid") + error = True + if len(request.form['age']) == 0: + flash("enter an age") + error = True + elif not request.form['age'].isdigit(): + flash("age must be a number") + error = True + elif int(request.form['age']) < 0: + flash("Age is invalid") + error = True + + if error: + return redirect("/") + + query = 'INSERT INTO friends(first_name, last_name, age, since) VALUES(:first_name, :last_name, :age, now())' + data = {"first_name":request.form["first_name"],"last_name":request.form["last_name"], "age":request.form["age"]} + mysql.query_db(query, data) + return redirect('/') + + + +app.run(debug=True) diff --git a/richardN/sqlFlask/friends/mySqlConnection.py b/richardN/sqlFlask/friends/mySqlConnection.py new file mode 100644 index 0000000..a304b9a --- /dev/null +++ b/richardN/sqlFlask/friends/mySqlConnection.py @@ -0,0 +1,40 @@ +""" import the necessary modules """ +from flask_sqlalchemy import SQLAlchemy +from sqlalchemy.sql import text +# Create a class that will give us an object that we can use to connect to a database +class MySQLConnection(object): + def __init__(self, app, db): + config = { + 'host': 'localhost', + 'database': db, # we got db as an argument + 'user': 'root', + 'password': 'root', + 'port': '3306' # change the port to match the port your SQL server is running on + } + # this will use the above values to generate the path to connect to your sql database + DATABASE_URI = "mysql://{}:{}@127.0.0.1:{}/{}".format(config['user'], config['password'], config['port'], config['database']) + app.config['SQLALCHEMY_DATABASE_URI'] = DATABASE_URI + app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True + # establish the connection to database + self.db = SQLAlchemy(app) + # this is the method we will use to query the database + def query_db(self, query, data=None): + result = self.db.session.execute(text(query), data) + if query[0:6].lower() == 'select': + # if the query was a select + # convert the result to a list of dictionaries + list_result = [dict(r) for r in result] + # return the results as a list of dictionaries + return list_result + elif query[0:6].lower() == 'insert': + # if the query was an insert, return the id of the + # commit changes + self.db.session.commit() + # row that was inserted + return result.lastrowid + else: + # if the query was an update or delete, return nothing and commit changes + self.db.session.commit() +# This is the module method to be called by the user in server.py. Make sure to provide the db name! +def MySQLConnector(app, db): + return MySQLConnection(app, db) diff --git a/richardN/sqlFlask/friends/templates/page1.html b/richardN/sqlFlask/friends/templates/page1.html new file mode 100644 index 0000000..d562b5d --- /dev/null +++ b/richardN/sqlFlask/friends/templates/page1.html @@ -0,0 +1,45 @@ + + + + + FacelessBook + + +

Friends

+ + + + + + + + {% with friends = data %} + {% if friends %} + {% for friend in friends %} + + + + + + {% endfor %} + {% endif %} + {% endwith %} +
NameAgeFriend Since
{{friend.first_name}} {{friend.last_name}}{{friend.age}}{{friend.since}}
+

Add a Friend

+ {% with messages = get_flashed_messages() %} + {% if messages %} +
    + {% for message in messages %} +
  • {{ message }}
  • + {% endfor %} +
+ {% endif %} + {% endwith %} + +
+ +
+
+
+ +
From 906d701bf77d018273889965dfea70f4b3bb62b5 Mon Sep 17 00:00:00 2001 From: richnamk Date: Wed, 15 Nov 2017 21:35:40 -0600 Subject: [PATCH 04/18] hustleHard --- richardN/sqlFlask/emailValidation/dojoSur.py | 22 ++++++++++ .../sqlFlask/emailValidation/emailval.mwb | Bin 0 -> 6052 bytes .../sqlFlask/emailValidation/emailval.mwb.bak | Bin 0 -> 5942 bytes .../sqlFlask/emailValidation/emailvali.py | 41 ++++++++++++++++++ .../emailValidation/mysqlconnection.py | 40 +++++++++++++++++ .../emailValidation/templates/page0.html | 26 +++++++++++ .../emailValidation/templates/page1.html | 26 +++++++++++ .../emailValidation/templates0/page1.html | 17 ++++++++ .../emailValidation/templates0/page2.html | 19 ++++++++ 9 files changed, 191 insertions(+) create mode 100644 richardN/sqlFlask/emailValidation/dojoSur.py create mode 100644 richardN/sqlFlask/emailValidation/emailval.mwb create mode 100644 richardN/sqlFlask/emailValidation/emailval.mwb.bak create mode 100644 richardN/sqlFlask/emailValidation/emailvali.py create mode 100644 richardN/sqlFlask/emailValidation/mysqlconnection.py create mode 100644 richardN/sqlFlask/emailValidation/templates/page0.html create mode 100644 richardN/sqlFlask/emailValidation/templates/page1.html create mode 100644 richardN/sqlFlask/emailValidation/templates0/page1.html create mode 100644 richardN/sqlFlask/emailValidation/templates0/page2.html diff --git a/richardN/sqlFlask/emailValidation/dojoSur.py b/richardN/sqlFlask/emailValidation/dojoSur.py new file mode 100644 index 0000000..cff38f8 --- /dev/null +++ b/richardN/sqlFlask/emailValidation/dojoSur.py @@ -0,0 +1,22 @@ +from flask import Flask, render_template, redirect, request +app = Flask(__name__) + +@app.route('/') +def home (): + + return render_template ('page1.html') + +@app.route('/page2',methods=['POST']) +def survey (): + + formData = { + 'Name': request.form['name'], + 'Location': request.form['location'], + 'FavLang': request.form['FavLang'], + 'Comment': request.form['Comment'] + } + print formData + + return render_template ('page2.html', form = formData) + +app.run(debug=True) diff --git a/richardN/sqlFlask/emailValidation/emailval.mwb b/richardN/sqlFlask/emailValidation/emailval.mwb new file mode 100644 index 0000000000000000000000000000000000000000..7557529eff1bc2bab0e4f066453db308cd08838f GIT binary patch literal 6052 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 a9sj9teRywcn>t#p_G literal 0 HcmV?d00001 diff --git a/richardN/sqlFlask/emailValidation/emailval.mwb.bak b/richardN/sqlFlask/emailValidation/emailval.mwb.bak new file mode 100644 index 0000000000000000000000000000000000000000..62b88675698c117bd4fd1d78fc14c900c7ea6dc9 GIT binary patch literal 5942 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 literal 0 HcmV?d00001 diff --git a/richardN/sqlFlask/emailValidation/emailvali.py b/richardN/sqlFlask/emailValidation/emailvali.py new file mode 100644 index 0000000..17dbf2d --- /dev/null +++ b/richardN/sqlFlask/emailValidation/emailvali.py @@ -0,0 +1,41 @@ + +from flask import Flask, render_template, redirect, request, flash +from mysqlconnection import MySQLConnector +import re +import sys + +EMAIL_REGEX = re.compile(r'^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9._-]+\.[a-zA-Z]+$') + +app = Flask(__name__) +app.secret_key='theyMayTakeOurLandButTheyWillNeverTakeOurFreedom!' + +mysql = MySQLConnector(app, 'emailval') + +@app.route("/") +def index(): + return render_template("page0.html") + +@app.route("/page1", methods=["POST"]) +def process(): + if len(request.form['email']) == 0: + flash("email can't be empty") + return redirect('/') + if not EMAIL_REGEX.match(request.form['email']): + flash("email not valid ") + return redirect('/') + + mysql.query_db("INSERT INTO emails(email, created_at) Values(:email, now())", {"email": request.form['email']}) + return redirect('/page1') + +@app.route('/page1') +def sucess(): + data = mysql.query_db("SELECT id, email, DATE_FORMAT(created_at, '%m/%e/%y %l:%i %p') AS date FROM emails") + + return render_template("page1.html", data = data) + +@app.route('/delete', methods=['POST']) +def delete(): + id = int(request.form['id']) + mysql.query_db("DELETE FROM email WHERE id = :id", {"id": id }) + return redirect('/page1') +app.run(debug=True) diff --git a/richardN/sqlFlask/emailValidation/mysqlconnection.py b/richardN/sqlFlask/emailValidation/mysqlconnection.py new file mode 100644 index 0000000..a12daeb --- /dev/null +++ b/richardN/sqlFlask/emailValidation/mysqlconnection.py @@ -0,0 +1,40 @@ +""" import the necessary modules """ +from flask_sqlalchemy import SQLAlchemy +from sqlalchemy.sql import text +# Create a class that will give us an object that we can use to connect to a database +class MySQLConnection(object): + def __init__(self, app, db): + config = { + 'host': 'localhost', + 'database': db, # we got db as an argument + 'user': 'root', + 'password': 'root', + 'port': '3306' # change the port to match the port your SQL server is running on + } + # this will use the above values to generate the path to connect to your sql database + DATABASE_URI = "mysql://{}:{}@127.0.0.1:{}/{}".format(config['user'], config['password'], config['port'], config['database']) + app.config['SQLALCHEMY_DATABASE_URI'] = DATABASE_URI + app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True + # establish the connection to database + self.db = SQLAlchemy(app) + # this is the method we will use to query the database + def query_db(self, query, data=None): + result = self.db.session.execute(text(query), data) + if query[0:6].lower() == 'select': + # if the query was a select + # convert the result to a list of dictionaries + list_result = [dict(r) for r in result] + # return the results as a list of dictionaries + return list_result + elif query[0:6].lower() == 'insert': + # if the query was an insert, return the id of the + # commit changes + self.db.session.commit() + # row that was inserted + return result.lastrowid + else: + # if the query was an update or delete, return nothing and commit changes + self.db.session.commit() +# This is the module method to be called by the user in server.py. Make sure to provide the db name! +def MySQLConnector(app, db): + return MySQLConnection(app, db) diff --git a/richardN/sqlFlask/emailValidation/templates/page0.html b/richardN/sqlFlask/emailValidation/templates/page0.html new file mode 100644 index 0000000..eae0fb4 --- /dev/null +++ b/richardN/sqlFlask/emailValidation/templates/page0.html @@ -0,0 +1,26 @@ + + + + + emailValidation + + + + + {% with messages = get_flashed_messages() %} + {% if messages %} +
+

EMAIL NOT VALID

+

{{ messages[0] }}

+
+ {% endif %} + {% endwith %} + + +
+ + + +
+ + diff --git a/richardN/sqlFlask/emailValidation/templates/page1.html b/richardN/sqlFlask/emailValidation/templates/page1.html new file mode 100644 index 0000000..f28a2ce --- /dev/null +++ b/richardN/sqlFlask/emailValidation/templates/page1.html @@ -0,0 +1,26 @@ + + + + + Page1 + + + +
+

{{email}} is VALID

+
+

Email:

+
+ + {% for email in data %} + + + + + + {% endfor %} +
{{email.email}}{{email.date}}
+
+ + + diff --git a/richardN/sqlFlask/emailValidation/templates0/page1.html b/richardN/sqlFlask/emailValidation/templates0/page1.html new file mode 100644 index 0000000..35c4ff1 --- /dev/null +++ b/richardN/sqlFlask/emailValidation/templates0/page1.html @@ -0,0 +1,17 @@ + + + + + page1 + + +

home

+
+ Name: + Location: + FavLang: + Comment: + + Continue + + diff --git a/richardN/sqlFlask/emailValidation/templates0/page2.html b/richardN/sqlFlask/emailValidation/templates0/page2.html new file mode 100644 index 0000000..ff07ca3 --- /dev/null +++ b/richardN/sqlFlask/emailValidation/templates0/page2.html @@ -0,0 +1,19 @@ + + + + + home + + +

page 2

+ + "Home" + + {{form.Name}} + {{form.Location}} + {{form.FavLang}} + {{form.Comment}} + +
+ + From c027f64470dc732ef818ef1d3a148eaf3e37817f Mon Sep 17 00:00:00 2001 From: richnamk Date: Wed, 15 Nov 2017 22:14:23 -0600 Subject: [PATCH 05/18] removedExtraFolders --- richardN/sqlFlask/emailValidation/dojoSur.py | 22 ---------- .../sqlFlask/emailValidation/emailvali.py | 2 +- .../emailValidation/templates0/page1.html | 17 -------- .../emailValidation/templates0/page2.html | 19 --------- richardN/sqlFlask/logNreg/logNreg.py | 7 ++++ richardN/sqlFlask/logNreg/mysqlconnection.py | 40 +++++++++++++++++++ richardN/sqlFlask/logNreg/templates/root.html | 10 +++++ 7 files changed, 58 insertions(+), 59 deletions(-) delete mode 100644 richardN/sqlFlask/emailValidation/dojoSur.py delete mode 100644 richardN/sqlFlask/emailValidation/templates0/page1.html delete mode 100644 richardN/sqlFlask/emailValidation/templates0/page2.html create mode 100644 richardN/sqlFlask/logNreg/logNreg.py create mode 100644 richardN/sqlFlask/logNreg/mysqlconnection.py create mode 100644 richardN/sqlFlask/logNreg/templates/root.html diff --git a/richardN/sqlFlask/emailValidation/dojoSur.py b/richardN/sqlFlask/emailValidation/dojoSur.py deleted file mode 100644 index cff38f8..0000000 --- a/richardN/sqlFlask/emailValidation/dojoSur.py +++ /dev/null @@ -1,22 +0,0 @@ -from flask import Flask, render_template, redirect, request -app = Flask(__name__) - -@app.route('/') -def home (): - - return render_template ('page1.html') - -@app.route('/page2',methods=['POST']) -def survey (): - - formData = { - 'Name': request.form['name'], - 'Location': request.form['location'], - 'FavLang': request.form['FavLang'], - 'Comment': request.form['Comment'] - } - print formData - - return render_template ('page2.html', form = formData) - -app.run(debug=True) diff --git a/richardN/sqlFlask/emailValidation/emailvali.py b/richardN/sqlFlask/emailValidation/emailvali.py index 17dbf2d..03d6d57 100644 --- a/richardN/sqlFlask/emailValidation/emailvali.py +++ b/richardN/sqlFlask/emailValidation/emailvali.py @@ -36,6 +36,6 @@ def sucess(): @app.route('/delete', methods=['POST']) def delete(): id = int(request.form['id']) - mysql.query_db("DELETE FROM email WHERE id = :id", {"id": id }) + mysql.query_db("DELETE FROM emails WHERE id = :id", {"id": id }) return redirect('/page1') app.run(debug=True) diff --git a/richardN/sqlFlask/emailValidation/templates0/page1.html b/richardN/sqlFlask/emailValidation/templates0/page1.html deleted file mode 100644 index 35c4ff1..0000000 --- a/richardN/sqlFlask/emailValidation/templates0/page1.html +++ /dev/null @@ -1,17 +0,0 @@ - - - - - page1 - - -

home

-
- Name: - Location: - FavLang: - Comment: - - Continue - - diff --git a/richardN/sqlFlask/emailValidation/templates0/page2.html b/richardN/sqlFlask/emailValidation/templates0/page2.html deleted file mode 100644 index ff07ca3..0000000 --- a/richardN/sqlFlask/emailValidation/templates0/page2.html +++ /dev/null @@ -1,19 +0,0 @@ - - - - - home - - -

page 2

- - "Home" - - {{form.Name}} - {{form.Location}} - {{form.FavLang}} - {{form.Comment}} - -
- - diff --git a/richardN/sqlFlask/logNreg/logNreg.py b/richardN/sqlFlask/logNreg/logNreg.py new file mode 100644 index 0000000..504a81d --- /dev/null +++ b/richardN/sqlFlask/logNreg/logNreg.py @@ -0,0 +1,7 @@ +from flask import Flask, render_template, redirect, request, session, flash +from mysqlconnection import MySQLConnector +import re, os, binascii, hashlib, sys + +app = Flask(__name__) +app.secret_key = 'chillyWIllYisDa$hitt' +mysql = MySQLConnector (app, ) diff --git a/richardN/sqlFlask/logNreg/mysqlconnection.py b/richardN/sqlFlask/logNreg/mysqlconnection.py new file mode 100644 index 0000000..a12daeb --- /dev/null +++ b/richardN/sqlFlask/logNreg/mysqlconnection.py @@ -0,0 +1,40 @@ +""" import the necessary modules """ +from flask_sqlalchemy import SQLAlchemy +from sqlalchemy.sql import text +# Create a class that will give us an object that we can use to connect to a database +class MySQLConnection(object): + def __init__(self, app, db): + config = { + 'host': 'localhost', + 'database': db, # we got db as an argument + 'user': 'root', + 'password': 'root', + 'port': '3306' # change the port to match the port your SQL server is running on + } + # this will use the above values to generate the path to connect to your sql database + DATABASE_URI = "mysql://{}:{}@127.0.0.1:{}/{}".format(config['user'], config['password'], config['port'], config['database']) + app.config['SQLALCHEMY_DATABASE_URI'] = DATABASE_URI + app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True + # establish the connection to database + self.db = SQLAlchemy(app) + # this is the method we will use to query the database + def query_db(self, query, data=None): + result = self.db.session.execute(text(query), data) + if query[0:6].lower() == 'select': + # if the query was a select + # convert the result to a list of dictionaries + list_result = [dict(r) for r in result] + # return the results as a list of dictionaries + return list_result + elif query[0:6].lower() == 'insert': + # if the query was an insert, return the id of the + # commit changes + self.db.session.commit() + # row that was inserted + return result.lastrowid + else: + # if the query was an update or delete, return nothing and commit changes + self.db.session.commit() +# This is the module method to be called by the user in server.py. Make sure to provide the db name! +def MySQLConnector(app, db): + return MySQLConnection(app, db) diff --git a/richardN/sqlFlask/logNreg/templates/root.html b/richardN/sqlFlask/logNreg/templates/root.html new file mode 100644 index 0000000..868987d --- /dev/null +++ b/richardN/sqlFlask/logNreg/templates/root.html @@ -0,0 +1,10 @@ + + + + + rootPage + + + + + From 8f1112862836d6df80e73fd90be29da6a81bb9c8 Mon Sep 17 00:00:00 2001 From: richnamk Date: Thu, 16 Nov 2017 16:48:35 -0600 Subject: [PATCH 06/18] update2EmailVal --- .../sqlFlask/emailValidation/emailval.mwb | Bin 6052 -> 6214 bytes .../sqlFlask/emailValidation/emailval.mwb.bak | Bin 5942 -> 0 bytes .../sqlFlask/emailValidation/emailval.mwb.mwb | Bin 0 -> 6052 bytes .../emailValidation/templates/page1.html | 2 +- 4 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 richardN/sqlFlask/emailValidation/emailval.mwb.bak create mode 100644 richardN/sqlFlask/emailValidation/emailval.mwb.mwb diff --git a/richardN/sqlFlask/emailValidation/emailval.mwb b/richardN/sqlFlask/emailValidation/emailval.mwb index 7557529eff1bc2bab0e4f066453db308cd08838f..32720e09cdff8cab0284811cf9ef374efba6bf5e 100644 GIT binary patch delta 5513 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 L9Rf`klV%q_5?Z3u delta 5331 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 diff --git a/richardN/sqlFlask/emailValidation/emailval.mwb.mwb b/richardN/sqlFlask/emailValidation/emailval.mwb.mwb new file mode 100644 index 0000000000000000000000000000000000000000..7557529eff1bc2bab0e4f066453db308cd08838f GIT binary patch literal 6052 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 a9sj9teRywcn>t#p_G literal 0 HcmV?d00001 diff --git a/richardN/sqlFlask/emailValidation/templates/page1.html b/richardN/sqlFlask/emailValidation/templates/page1.html index f28a2ce..43f9c7d 100644 --- a/richardN/sqlFlask/emailValidation/templates/page1.html +++ b/richardN/sqlFlask/emailValidation/templates/page1.html @@ -7,7 +7,7 @@
-

{{email}} is VALID

+

Your email is VALID

Email:

From 9f3f53307098ce52167199f86ff67a94194cca15 Mon Sep 17 00:00:00 2001 From: richnamk Date: Fri, 17 Nov 2017 13:20:10 -0600 Subject: [PATCH 07/18] animals --- richardN/PYoop/animals/animals.py | 47 +++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 richardN/PYoop/animals/animals.py diff --git a/richardN/PYoop/animals/animals.py b/richardN/PYoop/animals/animals.py new file mode 100644 index 0000000..8cded5b --- /dev/null +++ b/richardN/PYoop/animals/animals.py @@ -0,0 +1,47 @@ +class Animal(object): + def __init__(self, name): + self.health = 100 + self.name = name + + def walk(self): + self.health -= 1 + return self + + def run(self): + self.health -= 5 + return self + + def displayHealth(self): + print 'My name is: ' + self.name + print 'I have: ' + str(self.health) + ' health' + +animal = Animal('meow') +animal.walk().walk().walk().run().run().displayHealth() + +class Dog(Animal): + def __init__(self,name): + super(Dog, self).__init__(name) + self.health = 150 + + def pet(self): + self.health += 5 + return self + +dog = Dog('stella') +dog.walk().walk().walk().run().run().pet().displayHealth() + +class Dragon(Animal): + def __init__(self, name): + super(Dragon, self).__init__(name) + self.health = 170 + + def fly(self): + self.health -= 10 + return self + + def displayHealth(self): + print "a dragon" + super(Dragon, self).displayHealth() + +dragon = Dragon('toothless') +dragon.fly().displayHealth() From e23e1939a28a9bafe170bd042a9941d9059984e7 Mon Sep 17 00:00:00 2001 From: richnamk Date: Fri, 17 Nov 2017 13:23:52 -0600 Subject: [PATCH 08/18] math --- richardN/PYoop/math/dojoMath.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 richardN/PYoop/math/dojoMath.py diff --git a/richardN/PYoop/math/dojoMath.py b/richardN/PYoop/math/dojoMath.py new file mode 100644 index 0000000..7336362 --- /dev/null +++ b/richardN/PYoop/math/dojoMath.py @@ -0,0 +1,20 @@ +class math(object): + def __init__(self): + self.result=0 + def add(self, *nums): + for num in nums: + if type(num) == list or type(num) == tuple: + for k in num: + self.result += k + else: + self.result += num + return self + def subtract(self, *nums): + for num in nums: + if type(num) == list or type(num) == tuple: + for k in num: + self.result -= k + else: + self.result -= num + return self + print math().add([1],3,7).add([5, 8, 7, 2], [2, 4.3, 1.25]).subtract(2, [2,3], [1.1, 2.3]).result From 21ca1762428691b896c2989b173c15d55c60dd5f Mon Sep 17 00:00:00 2001 From: richnamk Date: Fri, 17 Nov 2017 15:23:23 -0600 Subject: [PATCH 09/18] logNreg --- richardN/sqlFlask/logNreg/logNreg.mwb | Bin 0 -> 6155 bytes richardN/sqlFlask/logNreg/logNreg.mwb.bak | Bin 0 -> 6194 bytes richardN/sqlFlask/logNreg/logNreg.py | 7 -- richardN/sqlFlask/logNreg/server.py | 116 ++++++++++++++++++ .../sqlFlask/logNreg/templates/index.html | 74 +++++++++++ richardN/sqlFlask/logNreg/templates/root.html | 10 -- richardN/sqlFlask/logNreg/templates/show.html | 16 +++ 7 files changed, 206 insertions(+), 17 deletions(-) create mode 100644 richardN/sqlFlask/logNreg/logNreg.mwb create mode 100644 richardN/sqlFlask/logNreg/logNreg.mwb.bak delete mode 100644 richardN/sqlFlask/logNreg/logNreg.py create mode 100644 richardN/sqlFlask/logNreg/server.py create mode 100644 richardN/sqlFlask/logNreg/templates/index.html delete mode 100644 richardN/sqlFlask/logNreg/templates/root.html create mode 100644 richardN/sqlFlask/logNreg/templates/show.html diff --git a/richardN/sqlFlask/logNreg/logNreg.mwb b/richardN/sqlFlask/logNreg/logNreg.mwb new file mode 100644 index 0000000000000000000000000000000000000000..5ac4b23b33bd016e44fe9a83d8938e009b897960 GIT binary patch literal 6155 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 literal 0 HcmV?d00001 diff --git a/richardN/sqlFlask/logNreg/logNreg.mwb.bak b/richardN/sqlFlask/logNreg/logNreg.mwb.bak new file mode 100644 index 0000000000000000000000000000000000000000..01eab07ea2caf276424c258961d322cf533b674b GIT binary patch literal 6194 zcmZ{oWmFXIw#Mo1knTomD3wM)L|~{HLPENSMj9y*i9sX=>5id?29fUWZs`Vrp^yJB z_ndpyz3;pB+H38#pS8a{&zGO3Dmn%Q3JMAiiW7#bs=fAe!839cl%5$B6q3JFOJ@sD zh?SFv0L05&z#HOtWNhe_+mIA^@*ys%_Z9@2QY+z0B%G-tH4jE%w#xG_yEDRyV%RD-}F9_96je&mpSPSMm&v%X3Bgn zHTBCaMT)Cc1D?yAlx%!y5h5G_Xhb@9FNb|vk^R+-ydGa+vio>+!QQYS2~=P_5e!{N zU6DoFIiE~=J%jl>zvsJr+K{hmg;5#MP%xWWxSm-#?mc^deDO%&8!1)mXtr3d5*JW1fLxkI z7l>3Vi^(;bqs>!cd5T%10o72SbJB?Iu=vUJ zY{xahsDf<-R{ApCICJHclk_7~joESG2i{W}1(@?)gYOu7w1NT_7qA<7&v=$9k_0-; zNcrgx83zr&2@{S^Hd@{qv?#4J53Kr?bn@bARz%?%;3W2u<*X8}L!LaQi#p?hu1}$p zMNVwcR9-?mP1{>8&R)PQY@k2UlQhN@eRAHq8O+ubLH$XG4n*!F0b)R*)SC<9!%@o@ zR;-PC$IS{~JnV@Wc+K7?!W1Yn<`(s7YJ8tLV^C z&gN;4#vf<25Eo&tXvI0H_CJWZwIb5<#J@690z?pc*hc{D=dqYGb~(;)_j&WCCQL2r ziz1yj@(B%+%_HXyQkkwioMoWJzlNQ}X~3y(mZn97@aqa_YIw-;15{Chk!xlVjXrIWpf4l})#_AxLrS?->5dA34LCB}A^@ zwuYbfP*GndA6 zMpe<6n4<#Tt`iie(yOZ5E;xRd-*v< z`~_GYPM$F~jMyH0vi;s9;OdiOl17|NpVW=f;V6tz!JISp?O000Fa6@pNBM71n-LED z2UnRpsls(R{aPud1;@A1g&8>_UWL`|+=m3;de&7`qoM9Y;)sTF)Y+72Fpbgd6sQ*k z$H5$~&`mHW3P76+jU?p9?ilcTd}*a=qC-QCKM$l?feC+OnKIF&NeCRsvR?qwhKc&y z7>JpCFk}qZN}^hYk3LxCNY6a$$DD9XHC09ro9o~l)eJh4cveXXCmGExu*l_4#Fql0 zg?PE0W&F-L7O~)>l5E^%rvk(mJS)qtd&|eCCN*7y+tz^SuO<53bXTY5Hpqjv|2hI#zo@f=eab6)cnK_XQ!**iFk z=GsEbH+<{t6|f;k)p(f){#=wN2L_)<2^-=g(?K5JBh$K-KK-x_MJSP(Q8R))I?*Gy zicut!@cHofQFzMD=cg_~%S#*cVb2cPH(G`{Yu4}LB9`A2zGvyeHc_;Agdi7KS?FUc zIqrMd-zxc)LKdFF2nRik@JVv$Q0VIL_!K99o1(ke|FzxMlXv*dWjd31cZBq zRFOwRL$rXe?Lx*G4~}r(EGn?ZO0cMe#f2nMO%7tGn_5HL=DUJrV`mmT%RMvz&37@Y z4{=JECoW`fdS3Ah4ttBf3!`*@s%@z3h!RU--SnR^BRgMglvV5CULza%JtTJ^Qc!Mh zD(__4*jM^-g4C3}7o}kPCpR4#Il+_CcEDn2?J&Ss#FXgA9jh^eMeosZn! zYsyB4^Dwp*ga<3}V3C*)g1E&fYHz5^O{Qm++i9D1GcijDlQTK|fRDdl9@XXw6MK`@ z)#QCnklt;LCic-~=pnFy5ig`s7*?1u5FHIpMT>9lH{wZg*%&8^z^NY%L7q1C$#3p$ zdhJ{SNFSI^M7$clMm{Gc-vNhuW(IlSsxXFiN?8O_D0drYHciDy#B_{|5XY8XJb6@e z4U8gehY-y&y_AK2j;)k`D1L&q_jA_$ofMlU=2FnW50yOVyCEiG!zK0%0rq{`V|z!RkUo<`!~0hx>t$`#fvc*yPl; zw*%%crBW?{*zXxNCvqXpiw8#0RqH2yDYV+r5)P1I<>ukjq_mCj;SO5JfIq^WIKkn# zK8uc!BefDB?4=$bjkLJNYG_Xd4rImDQ@4JS{dmcydg~1-!B)VOQdb6;k4_vj3vw>+ zNtzVtwAxj4u={agC~Bd!yd2U*DO=if|A)F(Hld3Bk6)Lwb+{hQp6-s|f+bB2U$|v} z(tE*BUCq@uMq{75S3`;j_X~iz>7BOofH8JFkw5A!3fQBSE3Tf`c%vD`s>)n6Ol7>w zy-YPKi?fHszQ~Z{z^viocCnagm#V#q$q05u?Q_`Kq2wr3(L&(7X;@Gy)&ARO{rJRo zJ}RA&FLpz4e0~Ij+r-8Ab<3i?H|vwP`p@9G=Zv(v+^+<&0!1fM=9*q<_o1_5^CXj~ z$DwV(dgp+@z|o2##WCU_#{~@O$&Rok`e42tRr8 z#Gjpt{+F;FmmZlUEG$nuP4%N`du{dt^heHkr&p=X?2h~PwSKOzIPM61K9+6LzPGqS z1~yiWOd@5JZze6L%C1P&0sG5fT5$*!d6v8qYO*$6vcN~wDM}rsDc$Uq`)8;W7~usx zW!l|$OW(j-YrK)27fmbt!a;22$d(iTB&F5dFd^M0lb4E-y>vqNCnh-A(C=wa~SReDm(YFm@j5r4R> zlfiX2%=O^c68}b>K^LUix4EiM{*aWM3~cMwB0Dn^^p%0Ys9TJ0c7}esD?kZ)I`)Yn zjx8R|*U0KAB<=m~;r;j_&8=&^d)%_|>U$JQ92e5&a&Zcr|F zzj3lGAKqP(`9Yrh3=%gqt&xD0!_om-JN$DDzJ!wXvX$qczoQ_ijPfvL+ecY9r&Nq{ zD0=7IB9i>m=g``htH5LbZcK7iQ)=>xkF+hdNCKu1d?bhAs4C()T>#={HL@4o4Ubk&er5X%jVp@hRR9Ybl`JR^=?Te4#8 z)eV*iPswKdEaygEM!$z0Z*LV9tu44YtBx!-WFE!4uO|(a#k-?Y5PDT_%_h2AzE=N| zf$pJKjl!9N8*!wWC0U-FEuTY8ah2pgOkkosqW)oerJqfc@}R)QTn^v}P|r3Wa5U3- z`2rBC2+z?`pI%K&%ghXHk&>F%91|_ zE=${wPS?W||CzENAIH-w_>7rMnim%WzB(t;ba2b|+8=r}guv9}BlQT!LRJShz9<&$ z?Iz$*7xurk1}hETxb6>{f0Zh-8&tt4eGg<^k`gSkY}gjfWkAi3v*aUx_nz{kLG)U8 zK9R~%DlUer48fKG^Z;G2R=!>aX$!j4Rz*y&ElcSzG zS9Xuc;lkUE6;<3nL;}PbkM7=XH^j&f3^0Sk$;n(shv&jDa8t#wR{^Sz1@?kH=Hz3B zF`2rMXFgRZ12Ph|l8A%dKfec8PG%Ydyb-tj=1ifM)0_?U@2bF(jV96Nu;WaaG|%?^ z;BA|UV{a)_XK8GIkt;V&0+SUsiBl$Sat$PfPZZ$)wpyOM$AN z+J#u-x?XMPNsj)5)4GJ=t1hB;EHv6$+&13xAc!1V(PyLC8hX9LVd4ma9_sD&w6Im1 zEC;OlhjqQy=#A4n`a3Wc3i2LlB=KVK@m;l#79{t(mfHvI)jZ1{ixD>&!KegvydCr1 z#2dKIuhFx>8NFev4+$4^EefW~^2V=Hyl*GezO$EDXNLy`qRa@YPL}`6Y%hy zWVCeez6np`>D~B*bq%N1^8D|Xz8)Lw{Bu)aECb(o;>jBQ&(&#NO2l^%6QPu+O=6xUJmEZ zkefJESfcB^aS8Zez@TL|~&XmZVgjXfnl{wG(DS-KS{t4)S`@ arLr2E zFYA3fLeZtXgoUg4Iu&Le^>GhJTm8%V6D8=C;lSb)X^C$((qITJkfWpDzUU*m1cP$5 zo)LKJ2*cHtLH*~d{qe_gjTjczINOB#o|B9$QNls7U%~2}=qXrMl+#R{ogVPea0i?! zHi0%M*HmY2k|uF4x}peAPLq8*Z=!W5(XEU~#76v&Ev?UU`pwwTn8a={uhfJOsLUeF zkM(yeaMH4-+=mfs(NUO?Km$3v;<}Y~1W3 zp7FB=dSw%DnW{R%!}nWV3eQn~XUj(9$*@2jmVw&Ex}2S{E$>^_?bL`Wfsl$`%nxsq zB{UzSW007FkqhI~30~mCc_x#9&;f|c-QNXmcla0-h)t`59k_Hip= zlc7)?$40Zb$%IyAlQ9&Nq!b`k02HpcG>RCJQIb4#%X?C^#w}xI0+ap3jpLn(IDqE2 z+ZUrMDU>u(k?Odz`5Dywufa+ zEh#_QhxT{nFI&X_+vF_G1ue}y%mggWkMxE$7KJD@Y-zN$@|Q_AHrSYl4(D9Wfz=F# zDLohoi1uPa2ruttXl-!SflU5`bMvw6yq)9_u2s$A+)LoM%=63pz)|1UotFcPtBc14 zxVr?(4=*vhcqGdYq_Emt)0F&1Bxm~$ClZb%o_cbsZ%z$mR9@BZq-(s;TK)JAUlkks z_=~cg|B`CuRJd?B%etDv{sj(R9xkY3la%w9hO|E&&|tcz$U&3J%`kKu@;b$|cHTDR z!h1^Mt1?|yafA>fA$3>uZ+SE~c7;B)PJbvU2seG*VK_ho^PA>ssOWckHy~~v7Ted) z9n`sYGH3Y&#ph^+x{ttIoQYgsr6Ig$z$V%!F54}I34`;sF1@1ei@bNX+!)s1m}A1CYtE=M z$5qkW6Q7BHdL~EvmKe{9gd$^j048Ix+a%-QY|?nASxr2UE%t6$ zL`vQHv?lx^Q26bW(4x~(zlfG3n#Lt5^2aG?Ku^J8dVn^~uaaHYs8G_Di)s@lZTRht ze-e>#U7bZ;}{$|+XYMIGXDiycpT1NK!Tc^}pPa7wrTSwaj_ zFGdDFN>5K8uAXH78Xonp!T*1D{@3;Y@&22n|EK!@iq^lSOn*=O6SV(U{CC9utx)-^ z_>aJ8s$%{VSQPZXzxZ#Lph7`;g`)1Gqou~I=j`TSZslZQ%dGBfY30al=4N4Q_tA{w-c67D@x>?!a{R@sQoH76a literal 0 HcmV?d00001 diff --git a/richardN/sqlFlask/logNreg/logNreg.py b/richardN/sqlFlask/logNreg/logNreg.py deleted file mode 100644 index 504a81d..0000000 --- a/richardN/sqlFlask/logNreg/logNreg.py +++ /dev/null @@ -1,7 +0,0 @@ -from flask import Flask, render_template, redirect, request, session, flash -from mysqlconnection import MySQLConnector -import re, os, binascii, hashlib, sys - -app = Flask(__name__) -app.secret_key = 'chillyWIllYisDa$hitt' -mysql = MySQLConnector (app, ) diff --git a/richardN/sqlFlask/logNreg/server.py b/richardN/sqlFlask/logNreg/server.py new file mode 100644 index 0000000..28ddc18 --- /dev/null +++ b/richardN/sqlFlask/logNreg/server.py @@ -0,0 +1,116 @@ +import md5, os, binascii, random +from flask import Flask, flash, redirect, render_template, request, session +from mysqlconnection import MySQLConnector + +import re +EMAIL_REGEX = re.compile(r'^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9._-]+\.[a-zA-Z]+$') +app = Flask(__name__) +app.secret_key = "nukedMyFirstTry" +mysql = MySQLConnector(app,'logNreg') + + +@app.route('/') +def index(): + return render_template('index.html') + if id not in session: + session['id'] = id + +@app.route('/register', methods = ['POST']) +def reg(): + valid = True + newUser = { + 'email': request.form['email'], + 'hashPass': request.form['hashPass'], + 'cPassword': request.form['cPassword'], + 'first_name': request.form['first_name'], + 'last_name': request.form['last_name'] + } + email = request.form['email'] + hashPass = request.form['hashPass'] + cPassword = request.form['cPassword'] + first_name = request.form['first_name'] + last_name = request.form['last_name'] + + if first_name < 2: + flash("name must be greater than 2 characters") + valid = False + elif not first_name.isalpha(): + flash("name must be letters only") + valid = False + + if last_name < 2: + flash("name must be greater than 2 characters") + valid = False + elif not last_name.isalpha(): + flash("name must be letters only") + valid = False + + if len(email) < 1 or len(hashPass) < 1 or len(cPassword) < 1 : + flash("email and hashPass required") + valid = False + elif len(hashPass) < 8: + flash("hashPass is too short") + valid = False + elif hashPass != cPassword: + flash("passwords dont match") + valid = False + elif not EMAIL_REGEX.match(email): + flash("email not valid") + valid = False + + if valid: + query = "SELECT email FROM users WHERE email = :email" + emails = mysql.query_db(query, {'email':email}) + if emails: + flash("email already in use") + else: + newUser['salt'] = binascii.b2a_hex(os.urandom(15)) + newUser['hash'] = md5.new(request.form['hashPass']+newUser['salt']).hexdigest() + query = "INSERT INTO users (first_name, last_name, email, hashPass, salt, created_at, updated_at) Values ( :first_name, :last_name, :email, :hashPass, :salt, NOW(), NOW() )" + session['user_id'] = mysql.query_db(query, newUser) + print session['user_id'] + print "You registered!" + return redirect('/success') + + return redirect('/') +@app.route('/login', methods = ['POST']) +def login(): + valid = True + newUser = { + 'user_email': request.form['user_email'], + 'user_password': request.form['user_password'], + } + if request.form['user_email'] < 2 : + valid = False + flash("fail") + elif request.form['user_password'] < 2: + valid = False + flash("wrong") + if valid: + query = "SELECT * FROM users WHERE email = :email" + users = mysql.query_db(query, {'email':newUser['user_email']}) + if len(users) > 0: + user = users[0] + if md5.new(request.form['user_password']+user['salt']).hexdigest(): + flash("You are logged in") + session['user_id'] = user['id'] + return redirect('/success') + else: + flash("Login failed") + return redirect ('/') + else: + flash("User not found") + return redirect ('/') + +@app.route('/success') +def show(): + query = "SELECT * from users WHERE id = :id" + data = {'id' :session['user_id']} + users = mysql.query_db(query, data) + print data + return render_template('show.html', user = users[0]) + + + +app.run(debug=True) + diff --git a/richardN/sqlFlask/logNreg/templates/index.html b/richardN/sqlFlask/logNreg/templates/index.html new file mode 100644 index 0000000..3860489 --- /dev/null +++ b/richardN/sqlFlask/logNreg/templates/index.html @@ -0,0 +1,74 @@ + + + + + + + + + + + Login and Registration + + + + {% with messages = get_flashed_messages() %} + {% if messages %} + {% for message in messages %} +

{{message}}

+ {% endfor %} + {% endif %} + {% endwith %} + +
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+ + +
+
+ +
+ +
+
+
+ +
+ +
+
+ +
+ + diff --git a/richardN/sqlFlask/logNreg/templates/root.html b/richardN/sqlFlask/logNreg/templates/root.html deleted file mode 100644 index 868987d..0000000 --- a/richardN/sqlFlask/logNreg/templates/root.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - - rootPage - - - - - diff --git a/richardN/sqlFlask/logNreg/templates/show.html b/richardN/sqlFlask/logNreg/templates/show.html new file mode 100644 index 0000000..b62b31a --- /dev/null +++ b/richardN/sqlFlask/logNreg/templates/show.html @@ -0,0 +1,16 @@ + + + + + + + User profile + + +

User

+

First name: {{user['first_name']}}

+

Last name: {{user['last_name']}}

+

Email: {{user['email']}}

+

Password: {{user['password']}}

+ + From a3017ec4218dc9328480594df52c5ae53eb8ca3a Mon Sep 17 00:00:00 2001 From: richnamk Date: Sun, 19 Nov 2017 19:08:15 -0600 Subject: [PATCH 10/18] wall --- richardN/sqlFlask/wall/dumpWall.sql | 73 ++++++++++++ richardN/sqlFlask/wall/dumpWall1.mwb | Bin 0 -> 9366 bytes richardN/sqlFlask/wall/mysqlconnection.py | 40 +++++++ richardN/sqlFlask/wall/server.py | 124 +++++++++++++++++++++ richardN/sqlFlask/wall/static/style.css | 0 richardN/sqlFlask/wall/templates/root.html | 84 ++++++++++++++ richardN/sqlFlask/wall/templates/wall.html | 50 +++++++++ richardN/sqlFlask/wall/wall.mwb | Bin 0 -> 9378 bytes 8 files changed, 371 insertions(+) create mode 100644 richardN/sqlFlask/wall/dumpWall.sql create mode 100644 richardN/sqlFlask/wall/dumpWall1.mwb create mode 100644 richardN/sqlFlask/wall/mysqlconnection.py create mode 100644 richardN/sqlFlask/wall/server.py create mode 100644 richardN/sqlFlask/wall/static/style.css create mode 100644 richardN/sqlFlask/wall/templates/root.html create mode 100644 richardN/sqlFlask/wall/templates/wall.html create mode 100644 richardN/sqlFlask/wall/wall.mwb diff --git a/richardN/sqlFlask/wall/dumpWall.sql b/richardN/sqlFlask/wall/dumpWall.sql new file mode 100644 index 0000000..a771636 --- /dev/null +++ b/richardN/sqlFlask/wall/dumpWall.sql @@ -0,0 +1,73 @@ +SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0; +SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; +SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES'; + +-- ----------------------------------------------------- +-- Schema wall +-- ----------------------------------------------------- +CREATE SCHEMA IF NOT EXISTS `wall` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ; +USE `wall` ; + +-- ----------------------------------------------------- +-- Table `wall`.`users` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `wall`.`users` ( + `id` INT NOT NULL, + `first_name` VARCHAR(255) NULL, + `last_name` VARCHAR(255) NULL, + `email` VARCHAR(255) NULL, + `password` VARCHAR(255) NULL, + `created_at` VARCHAR(255) NULL, + `updated_at` VARCHAR(255) NULL, + PRIMARY KEY (`id`)) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `wall`.`messages` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `wall`.`messages` ( + `id` INT NOT NULL AUTO_INCREMENT, + `users_id` INT NOT NULL, + `message` TEXT NULL, + `created_at` VARCHAR(255) NULL, + `updated_at` VARCHAR(255) NULL, + PRIMARY KEY (`id`), + INDEX `fk_messages_users1_idx` (`users_id` ASC), + CONSTRAINT `fk_messages_users1` + FOREIGN KEY (`users_id`) + REFERENCES `wall`.`users` (`id`) + ON DELETE NO ACTION + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `wall`.`comments` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `wall`.`comments` ( + `id` INT NOT NULL AUTO_INCREMENT, + `users_id` INT NOT NULL, + `messages_id` INT NOT NULL, + `comment` TEXT NULL, + `created_at` VARCHAR(255) NULL, + `updated_at` VARCHAR(255) NULL, + PRIMARY KEY (`id`), + INDEX `fk_comments_users_idx` (`users_id` ASC), + INDEX `fk_comments_messages1_idx` (`messages_id` ASC), + CONSTRAINT `fk_comments_users` + FOREIGN KEY (`users_id`) + REFERENCES `wall`.`users` (`id`) + ON DELETE NO ACTION + ON UPDATE NO ACTION, + CONSTRAINT `fk_comments_messages1` + FOREIGN KEY (`messages_id`) + REFERENCES `wall`.`messages` (`id`) + ON DELETE NO ACTION + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +SET SQL_MODE=@OLD_SQL_MODE; +SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; +SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS; diff --git a/richardN/sqlFlask/wall/dumpWall1.mwb b/richardN/sqlFlask/wall/dumpWall1.mwb new file mode 100644 index 0000000000000000000000000000000000000000..8c6862fcb3b88498cc7fcb31d32a42e1a74eed68 GIT binary patch literal 9366 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 Cp~d9@ literal 0 HcmV?d00001 diff --git a/richardN/sqlFlask/wall/mysqlconnection.py b/richardN/sqlFlask/wall/mysqlconnection.py new file mode 100644 index 0000000..a12daeb --- /dev/null +++ b/richardN/sqlFlask/wall/mysqlconnection.py @@ -0,0 +1,40 @@ +""" import the necessary modules """ +from flask_sqlalchemy import SQLAlchemy +from sqlalchemy.sql import text +# Create a class that will give us an object that we can use to connect to a database +class MySQLConnection(object): + def __init__(self, app, db): + config = { + 'host': 'localhost', + 'database': db, # we got db as an argument + 'user': 'root', + 'password': 'root', + 'port': '3306' # change the port to match the port your SQL server is running on + } + # this will use the above values to generate the path to connect to your sql database + DATABASE_URI = "mysql://{}:{}@127.0.0.1:{}/{}".format(config['user'], config['password'], config['port'], config['database']) + app.config['SQLALCHEMY_DATABASE_URI'] = DATABASE_URI + app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True + # establish the connection to database + self.db = SQLAlchemy(app) + # this is the method we will use to query the database + def query_db(self, query, data=None): + result = self.db.session.execute(text(query), data) + if query[0:6].lower() == 'select': + # if the query was a select + # convert the result to a list of dictionaries + list_result = [dict(r) for r in result] + # return the results as a list of dictionaries + return list_result + elif query[0:6].lower() == 'insert': + # if the query was an insert, return the id of the + # commit changes + self.db.session.commit() + # row that was inserted + return result.lastrowid + else: + # if the query was an update or delete, return nothing and commit changes + self.db.session.commit() +# This is the module method to be called by the user in server.py. Make sure to provide the db name! +def MySQLConnector(app, db): + return MySQLConnection(app, db) diff --git a/richardN/sqlFlask/wall/server.py b/richardN/sqlFlask/wall/server.py new file mode 100644 index 0000000..f928e5c --- /dev/null +++ b/richardN/sqlFlask/wall/server.py @@ -0,0 +1,124 @@ +from flask import Flask, flash, redirect, render_template, request, session +from mysqlconnection import MySQLConnector +import re + +EMAIL_REGEX = re.compile(r'^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9._-]+\.[a-zA-Z]+$') +app = Flask(__name__) +app.secret_key = "imBuildingThisWallForMeNotTRUMP!" + +mysql = MySQLConnector(app, "wall") + +@app.route('/', methods=['GET']) +def index(): + return render_template('root.html') + if id not in session: + session["id"] = id + +@app.route('/register', methods=['POST']) +def register(): + error = True + newUser = { + 'email': request.form['email'], + 'password': request.form['password'], + 'cPassword': request.form['cPassword'], + 'first_name': request.form['first_name'], + 'last_name': request.form['last_name'] + } + email = request.form['email'] + password = request.form['password'] + cPassword = request.form['cPassword'] + first_name = request.form['first_name'] + last_name = request.form['last_name'] + + if first_name < 0: + flash("First name field empty") + error = False + if last_name < 0: + flash("Last name field empty") + error = False + if len(email) < 0 or len(password) < 0 or len(cPassword) < 0: + flash("email and password is missing") + elif len(password) < 8: + flash("password not long enough") + error = False + elif password != cPassword: + flash("passwords don't match") + error = False + elif EMAIL_REGEX.match(email): + flash("Email not valid") + error = False + if error: + query = "SELECT email FROM users WHERE email = :email" + emails = mysql.query_db(query,{'email':email}) + if emails: + flash("email not available") + else: + query = "INSERT INTO users(first_name, last_name, email, password, created_at, updated_at) VALUES (:first_name, :last_name, :email, :password, NOW(), NOW())" + session ['user_id'] = mysql.query_db(Users) + print session["user_id"] + print "You're registered" + return redirect('/wall') + return redirect ('/') + +@app.route('/login', methods = ['POST']) +def login(): + error = True + newUser = { + 'user_email': request.form['user_email'], + 'user_password': request.form['user_password'] + } + if request.form['user_email'] < 0: + error = False + flash("Invalid Email") + if request.form['user_password'] < 0: + error = False + flash("Invalid Password") + if error: + query = "SELECT * FROM users WHERE email = :email" + users = mysql.query_db(query, {'email':request.form['user_email']}) + if len(users) > 0: + user = users[0] + session['user_id'] = user['id'] + return redirect('/wall') + else: + flash("Login failed") + return redirect ('/') + else: + flash("User not found") + return redirect ('/') + +@app.route('/logoff') +def logoff(): + session.pop ('user_id') + return redirect ('/') + +@app.route('/wall') +def wall(): + if 'user_id' not in session: + return redirect ('/') + query = "SELECT messages.id, messages.message, users.first_name, messages.created_at FROM messages JOIN users ON users.id= messages.users_id ORDER BY messages.created_at DESC" + mysql.query_db(query) + return render_template('wall.html') + +@app.route('/messages', methods=["POST"]) +def newMessage(): + message = request.form['message'] + if message =="": + return redirect('/wall') + query = "INSERT INTO messages (message, user_id, created_at) VALUES (:message, :user_id, NOW())" + data = {'message':message, 'user_id': session['user_id']} + mysql.query_db(query, data) + return redirect('/wall') + +@app.route('/comments', methods=["POST"]) +def newComment(): + message_id = request.form['message_id'] + comment = request.form['comment'] + if comment =="": + return redirect('/wall') + query = "INSERT INTO comments (comment, created_at, message_id, user_id) VALUES (:comment, NOW(), :message_id, :user_id)" + data = {'comment':comment, 'message_id':message_id, 'user_id': session['user_id']} + mysql.query_db(query, data) + return redirect('/wall') + +app.run(debug=True) \ No newline at end of file diff --git a/richardN/sqlFlask/wall/static/style.css b/richardN/sqlFlask/wall/static/style.css new file mode 100644 index 0000000..e69de29 diff --git a/richardN/sqlFlask/wall/templates/root.html b/richardN/sqlFlask/wall/templates/root.html new file mode 100644 index 0000000..c60f9d6 --- /dev/null +++ b/richardN/sqlFlask/wall/templates/root.html @@ -0,0 +1,84 @@ + + + + + + + + + + + Login and Registration + + + + {% with messages = get_flashed_messages() %} + {% if messages %} + {% for message in messages %} +

{{message}}

+ {% endfor %} + {% endif %} + {% endwith %} +

Register!

+
+
+ +
+ +
+
+
+
+ +
+ +
+
+
+
+ +
+ +
+
+
+
+ +
+ +
+
+
+
+ +
+ +
+
+
+ +
+

Login!

+
+
+ +
+ +
+
+
+
+ +
+ +
+
+
+ +
+ + + \ No newline at end of file diff --git a/richardN/sqlFlask/wall/templates/wall.html b/richardN/sqlFlask/wall/templates/wall.html new file mode 100644 index 0000000..0755777 --- /dev/null +++ b/richardN/sqlFlask/wall/templates/wall.html @@ -0,0 +1,50 @@ + + + + + + Wall + + + + +
+

Post a message

+
+
+ +
+ +
+
+ {% for message in messages %} +
+
+

{{message.user}}-{{message.created_at}}{{message.message}}

+ + {% for comment in comments %} + {% if comment.message_id == message.id %} +

{{comment.user}}-{{comment.created_at}}{{comment.comment}}

+ {% endif %} + {% endfor %} +

Post a comment

+
+
+ +
+ + +
+
+
+ {% endfor %} + + + + \ No newline at end of file diff --git a/richardN/sqlFlask/wall/wall.mwb b/richardN/sqlFlask/wall/wall.mwb new file mode 100644 index 0000000000000000000000000000000000000000..d9fce40b6c4f5822f8eea796a9b3323c86764789 GIT binary patch literal 9378 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 literal 0 HcmV?d00001 From 9e78634d51a16e4acc6df66192a09f3353fb3f1a Mon Sep 17 00:00:00 2001 From: richnamk Date: Mon, 20 Nov 2017 12:03:08 -0600 Subject: [PATCH 11/18] blog --- .../django/blogs_app_ass/apps/__init__.py | 0 .../blogs_app_ass/apps/blogs_app/__init__.py | 0 .../blogs_app_ass/apps/blogs_app/admin.py | 6 + .../blogs_app_ass/apps/blogs_app/apps.py | 8 ++ .../apps/blogs_app/migrations/__init__.py | 0 .../blogs_app_ass/apps/blogs_app/models.py | 6 + .../blogs_app/templates/blogs_app/index.html | 10 ++ .../blogs_app_ass/apps/blogs_app/tests.py | 6 + .../blogs_app_ass/apps/blogs_app/urls.py | 11 ++ .../blogs_app_ass/apps/blogs_app/views.py | 42 ++++++ .../blogs_app_ass/blogs_app_ass/__init__.py | 0 .../blogs_app_ass/blogs_app_ass/settings.py | 121 +++++++++++++++++ .../blogs_app_ass/blogs_app_ass/urls.py | 21 +++ .../blogs_app_ass/blogs_app_ass/wsgi.py | 16 +++ richardN/django/blogs_app_ass/db.sqlite3 | Bin 0 -> 3072 bytes richardN/django/blogs_app_ass/manage.py | 22 ++++ richardN/django/main/apps/__init__.py | 0 .../django/main/apps/blogs_app/__init__.py | 0 richardN/django/main/apps/blogs_app/admin.py | 6 + richardN/django/main/apps/blogs_app/apps.py | 8 ++ .../apps/blogs_app/migrations/__init__.py | 0 richardN/django/main/apps/blogs_app/models.py | 29 +++++ richardN/django/main/apps/blogs_app/tests.py | 6 + richardN/django/main/apps/blogs_app/urls.py | 5 + richardN/django/main/apps/blogs_app/views.py | 11 ++ .../django/main/apps/first_app/__init__.py | 0 richardN/django/main/apps/first_app/admin.py | 6 + richardN/django/main/apps/first_app/apps.py | 8 ++ .../apps/first_app/migrations/__init__.py | 0 richardN/django/main/apps/first_app/models.py | 6 + richardN/django/main/apps/first_app/tests.py | 6 + richardN/django/main/apps/first_app/urls.py | 5 + richardN/django/main/apps/first_app/views.py | 11 ++ richardN/django/main/db.sqlite3 | Bin 0 -> 3072 bytes richardN/django/main/main/__init__.py | 0 richardN/django/main/main/settings.py | 122 ++++++++++++++++++ richardN/django/main/main/urls.py | 23 ++++ richardN/django/main/main/wsgi.py | 16 +++ richardN/django/main/manage.py | 22 ++++ richardN/django/main/templates/page1.html | 17 +++ richardN/django/main/templates/page2.html | 19 +++ 41 files changed, 595 insertions(+) create mode 100644 richardN/django/blogs_app_ass/apps/__init__.py create mode 100644 richardN/django/blogs_app_ass/apps/blogs_app/__init__.py create mode 100644 richardN/django/blogs_app_ass/apps/blogs_app/admin.py create mode 100644 richardN/django/blogs_app_ass/apps/blogs_app/apps.py create mode 100644 richardN/django/blogs_app_ass/apps/blogs_app/migrations/__init__.py create mode 100644 richardN/django/blogs_app_ass/apps/blogs_app/models.py create mode 100644 richardN/django/blogs_app_ass/apps/blogs_app/templates/blogs_app/index.html create mode 100644 richardN/django/blogs_app_ass/apps/blogs_app/tests.py create mode 100644 richardN/django/blogs_app_ass/apps/blogs_app/urls.py create mode 100644 richardN/django/blogs_app_ass/apps/blogs_app/views.py create mode 100644 richardN/django/blogs_app_ass/blogs_app_ass/__init__.py create mode 100644 richardN/django/blogs_app_ass/blogs_app_ass/settings.py create mode 100644 richardN/django/blogs_app_ass/blogs_app_ass/urls.py create mode 100644 richardN/django/blogs_app_ass/blogs_app_ass/wsgi.py create mode 100644 richardN/django/blogs_app_ass/db.sqlite3 create mode 100644 richardN/django/blogs_app_ass/manage.py create mode 100644 richardN/django/main/apps/__init__.py create mode 100644 richardN/django/main/apps/blogs_app/__init__.py create mode 100644 richardN/django/main/apps/blogs_app/admin.py create mode 100644 richardN/django/main/apps/blogs_app/apps.py create mode 100644 richardN/django/main/apps/blogs_app/migrations/__init__.py create mode 100644 richardN/django/main/apps/blogs_app/models.py create mode 100644 richardN/django/main/apps/blogs_app/tests.py create mode 100644 richardN/django/main/apps/blogs_app/urls.py create mode 100644 richardN/django/main/apps/blogs_app/views.py create mode 100644 richardN/django/main/apps/first_app/__init__.py create mode 100644 richardN/django/main/apps/first_app/admin.py create mode 100644 richardN/django/main/apps/first_app/apps.py create mode 100644 richardN/django/main/apps/first_app/migrations/__init__.py create mode 100644 richardN/django/main/apps/first_app/models.py create mode 100644 richardN/django/main/apps/first_app/tests.py create mode 100644 richardN/django/main/apps/first_app/urls.py create mode 100644 richardN/django/main/apps/first_app/views.py create mode 100644 richardN/django/main/db.sqlite3 create mode 100644 richardN/django/main/main/__init__.py create mode 100644 richardN/django/main/main/settings.py create mode 100644 richardN/django/main/main/urls.py create mode 100644 richardN/django/main/main/wsgi.py create mode 100644 richardN/django/main/manage.py create mode 100644 richardN/django/main/templates/page1.html create mode 100644 richardN/django/main/templates/page2.html diff --git a/richardN/django/blogs_app_ass/apps/__init__.py b/richardN/django/blogs_app_ass/apps/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/richardN/django/blogs_app_ass/apps/blogs_app/__init__.py b/richardN/django/blogs_app_ass/apps/blogs_app/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/richardN/django/blogs_app_ass/apps/blogs_app/admin.py b/richardN/django/blogs_app_ass/apps/blogs_app/admin.py new file mode 100644 index 0000000..13be29d --- /dev/null +++ b/richardN/django/blogs_app_ass/apps/blogs_app/admin.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.contrib import admin + +# Register your models here. diff --git a/richardN/django/blogs_app_ass/apps/blogs_app/apps.py b/richardN/django/blogs_app_ass/apps/blogs_app/apps.py new file mode 100644 index 0000000..779e01b --- /dev/null +++ b/richardN/django/blogs_app_ass/apps/blogs_app/apps.py @@ -0,0 +1,8 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.apps import AppConfig + + +class BlogsAppConfig(AppConfig): + name = 'blogs_app' diff --git a/richardN/django/blogs_app_ass/apps/blogs_app/migrations/__init__.py b/richardN/django/blogs_app_ass/apps/blogs_app/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/richardN/django/blogs_app_ass/apps/blogs_app/models.py b/richardN/django/blogs_app_ass/apps/blogs_app/models.py new file mode 100644 index 0000000..1dfab76 --- /dev/null +++ b/richardN/django/blogs_app_ass/apps/blogs_app/models.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models + +# Create your models here. diff --git a/richardN/django/blogs_app_ass/apps/blogs_app/templates/blogs_app/index.html b/richardN/django/blogs_app_ass/apps/blogs_app/templates/blogs_app/index.html new file mode 100644 index 0000000..f663bf2 --- /dev/null +++ b/richardN/django/blogs_app_ass/apps/blogs_app/templates/blogs_app/index.html @@ -0,0 +1,10 @@ +

placeholder to later display all the list of blogs

+ + + \ No newline at end of file diff --git a/richardN/django/blogs_app_ass/apps/blogs_app/tests.py b/richardN/django/blogs_app_ass/apps/blogs_app/tests.py new file mode 100644 index 0000000..5982e6b --- /dev/null +++ b/richardN/django/blogs_app_ass/apps/blogs_app/tests.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.test import TestCase + +# Create your tests here. diff --git a/richardN/django/blogs_app_ass/apps/blogs_app/urls.py b/richardN/django/blogs_app_ass/apps/blogs_app/urls.py new file mode 100644 index 0000000..1106c40 --- /dev/null +++ b/richardN/django/blogs_app_ass/apps/blogs_app/urls.py @@ -0,0 +1,11 @@ +from django.conf.urls import url +from . import views + +urlpatterns = [ + url(r'^$', views.index), + url(r'^new$', views.new), + url(r'^create$', views.create), + url(r'^(?P\d+)$', views.show), + url(r'^(?P\d+)/edit$', views.edit), + url(r'^(?P\d+)/delete$', views.destroy) +] \ No newline at end of file diff --git a/richardN/django/blogs_app_ass/apps/blogs_app/views.py b/richardN/django/blogs_app_ass/apps/blogs_app/views.py new file mode 100644 index 0000000..5b9622a --- /dev/null +++ b/richardN/django/blogs_app_ass/apps/blogs_app/views.py @@ -0,0 +1,42 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.shortcuts import render, HttpResponse, redirect +# Create your views here. +def environment(**options): + env = Environment(**options) + env.globals.update({ + 'static': staticfiles_storage.url, + 'url': reverse, + }) + return env + +def index(request): + response = "placeholder to later display all the list of blogs" + return HttpResponse(response) + +def new(request): + response = "placeholder to display a new form to create a new blog" + return HttpResponse(response) + +def create(request): + # if request.method == "POST": + # print "*"*50 + # print request.POST + # print request.POST['name'] + # print request.POST['desc'] + # request.session['name'] = request.POST['name'] + # request.session['counter'] = 100 + # print "*"*50 + return redirect("/") + +def show(request, num): + response = "placeholder to display blog {}".format(num) + return HttpResponse(response) + +def edit(request, num): + response = "placeholder to edit blog {}".format(num) + return HttpResponse(response) + +def destroy(request, num): + return redirect('/') \ No newline at end of file diff --git a/richardN/django/blogs_app_ass/blogs_app_ass/__init__.py b/richardN/django/blogs_app_ass/blogs_app_ass/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/richardN/django/blogs_app_ass/blogs_app_ass/settings.py b/richardN/django/blogs_app_ass/blogs_app_ass/settings.py new file mode 100644 index 0000000..b1a4c20 --- /dev/null +++ b/richardN/django/blogs_app_ass/blogs_app_ass/settings.py @@ -0,0 +1,121 @@ +""" +Django settings for blogs_app_ass project. + +Generated by 'django-admin startproject' using Django 1.11.7. + +For more information on this file, see +https://docs.djangoproject.com/en/1.11/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/1.11/ref/settings/ +""" + +import os + +# Build paths inside the project like this: os.path.join(BASE_DIR, ...) +BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/1.11/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = 'agist&j8g7kwf(@jlm*s^ia)b%l3z(z7^#iv(_+#!y&!fjb%($' + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +ALLOWED_HOSTS = [] + + +# Application definition + +INSTALLED_APPS = [ + 'apps.blogs_app', + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', +] + +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 = 'blogs_app_ass.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 = 'blogs_app_ass.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/1.11/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), + } +} + + +# Password validation +# https://docs.djangoproject.com/en/1.11/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/1.11/topics/i18n/ + +LANGUAGE_CODE = 'en-us' + +TIME_ZONE = 'UTC' + +USE_I18N = True + +USE_L10N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/1.11/howto/static-files/ + +STATIC_URL = '/static/' diff --git a/richardN/django/blogs_app_ass/blogs_app_ass/urls.py b/richardN/django/blogs_app_ass/blogs_app_ass/urls.py new file mode 100644 index 0000000..e2242b8 --- /dev/null +++ b/richardN/django/blogs_app_ass/blogs_app_ass/urls.py @@ -0,0 +1,21 @@ +"""blogs_app_ass URL Configuration + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/1.11/topics/http/urls/ +Examples: +Function views + 1. Add an import: from my_app import views + 2. Add a URL to urlpatterns: url(r'^$', views.home, name='home') +Class-based views + 1. Add an import: from other_app.views import Home + 2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home') +Including another URLconf + 1. Import the include() function: from django.conf.urls import url, include + 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) +""" +from django.conf.urls import url, include +from django.contrib import admin + +urlpatterns = [ + url(r'^', include('apps.blogs_app.urls')), +] diff --git a/richardN/django/blogs_app_ass/blogs_app_ass/wsgi.py b/richardN/django/blogs_app_ass/blogs_app_ass/wsgi.py new file mode 100644 index 0000000..93f319a --- /dev/null +++ b/richardN/django/blogs_app_ass/blogs_app_ass/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for blogs_app_ass 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/1.11/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "blogs_app_ass.settings") + +application = get_wsgi_application() diff --git a/richardN/django/blogs_app_ass/db.sqlite3 b/richardN/django/blogs_app_ass/db.sqlite3 new file mode 100644 index 0000000000000000000000000000000000000000..e3d7819f02409a5bddf4ac87ad12a5f25384c909 GIT binary patch literal 3072 zcmeHGJx{|h5VeyECg!duiy={qDuKEakcWyiEg>B;Ri-h)C?Bn3*x@JgBlsO$kXos& z5K~bHpLDjK@80?J?0dKmm67mN>rxoFA{|00xdtGFP;?i4Z7uGs0q!mS%P6_{a?dc! zaXyKAj*B&`z(Ez5Iw##;kETXE7P46t_`TbJAG dHPr`w8(Z8eU==tf1?>DE(`(pXtOEb5z&GKFYXkrQ literal 0 HcmV?d00001 diff --git a/richardN/django/blogs_app_ass/manage.py b/richardN/django/blogs_app_ass/manage.py new file mode 100644 index 0000000..c6b854d --- /dev/null +++ b/richardN/django/blogs_app_ass/manage.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +import os +import sys + +if __name__ == "__main__": + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "blogs_app_ass.settings") + try: + from django.core.management import execute_from_command_line + except ImportError: + # The above import may fail for some other reason. Ensure that the + # issue is really that Django is missing to avoid masking other + # exceptions on Python 2. + try: + import django + except ImportError: + raise ImportError( + "Couldn't import Django. Are you sure it's installed and " + "available on your PYTHONPATH environment variable? Did you " + "forget to activate a virtual environment?" + ) + raise + execute_from_command_line(sys.argv) diff --git a/richardN/django/main/apps/__init__.py b/richardN/django/main/apps/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/richardN/django/main/apps/blogs_app/__init__.py b/richardN/django/main/apps/blogs_app/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/richardN/django/main/apps/blogs_app/admin.py b/richardN/django/main/apps/blogs_app/admin.py new file mode 100644 index 0000000..13be29d --- /dev/null +++ b/richardN/django/main/apps/blogs_app/admin.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.contrib import admin + +# Register your models here. diff --git a/richardN/django/main/apps/blogs_app/apps.py b/richardN/django/main/apps/blogs_app/apps.py new file mode 100644 index 0000000..779e01b --- /dev/null +++ b/richardN/django/main/apps/blogs_app/apps.py @@ -0,0 +1,8 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.apps import AppConfig + + +class BlogsAppConfig(AppConfig): + name = 'blogs_app' diff --git a/richardN/django/main/apps/blogs_app/migrations/__init__.py b/richardN/django/main/apps/blogs_app/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/richardN/django/main/apps/blogs_app/models.py b/richardN/django/main/apps/blogs_app/models.py new file mode 100644 index 0000000..f937be2 --- /dev/null +++ b/richardN/django/main/apps/blogs_app/models.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models + +# Create your models here. +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.shortcuts import HttpResponse, redirect + +def index(request): + return HttpResponse("placeholder to later display all the list of blogs") + +def new(request): + return HttpResponse("placeholder to display a new form to create a new blog") + +def create(request): + return redirect('/') + +def show(request, blog_id): + print blog_id + return HttpResponse("placeholder to display blog {}".format(blog_id)) + +def edit(request, blog_id): + return HttpResponse("placeholder to edit blog {}".format(blog_id)) + +def delete(request, blog_id): + return redirect('/') \ No newline at end of file diff --git a/richardN/django/main/apps/blogs_app/tests.py b/richardN/django/main/apps/blogs_app/tests.py new file mode 100644 index 0000000..5982e6b --- /dev/null +++ b/richardN/django/main/apps/blogs_app/tests.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.test import TestCase + +# Create your tests here. diff --git a/richardN/django/main/apps/blogs_app/urls.py b/richardN/django/main/apps/blogs_app/urls.py new file mode 100644 index 0000000..ec613f9 --- /dev/null +++ b/richardN/django/main/apps/blogs_app/urls.py @@ -0,0 +1,5 @@ +from django.conf.urls import url +from . import views +urlpatterns = [ + url(r'^$',views.index) +] diff --git a/richardN/django/main/apps/blogs_app/views.py b/richardN/django/main/apps/blogs_app/views.py new file mode 100644 index 0000000..0b5c746 --- /dev/null +++ b/richardN/django/main/apps/blogs_app/views.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.shortcuts import render + +# Create your views here. +from django.shortcuts import render, HttpResponse, redirect + +def index(request): + response = "FML GET TO WORK OR FAIL" + return HttpResponse(response) diff --git a/richardN/django/main/apps/first_app/__init__.py b/richardN/django/main/apps/first_app/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/richardN/django/main/apps/first_app/admin.py b/richardN/django/main/apps/first_app/admin.py new file mode 100644 index 0000000..13be29d --- /dev/null +++ b/richardN/django/main/apps/first_app/admin.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.contrib import admin + +# Register your models here. diff --git a/richardN/django/main/apps/first_app/apps.py b/richardN/django/main/apps/first_app/apps.py new file mode 100644 index 0000000..70b2f8d --- /dev/null +++ b/richardN/django/main/apps/first_app/apps.py @@ -0,0 +1,8 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.apps import AppConfig + + +class FirstAppConfig(AppConfig): + name = 'first_app' diff --git a/richardN/django/main/apps/first_app/migrations/__init__.py b/richardN/django/main/apps/first_app/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/richardN/django/main/apps/first_app/models.py b/richardN/django/main/apps/first_app/models.py new file mode 100644 index 0000000..1dfab76 --- /dev/null +++ b/richardN/django/main/apps/first_app/models.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models + +# Create your models here. diff --git a/richardN/django/main/apps/first_app/tests.py b/richardN/django/main/apps/first_app/tests.py new file mode 100644 index 0000000..5982e6b --- /dev/null +++ b/richardN/django/main/apps/first_app/tests.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.test import TestCase + +# Create your tests here. diff --git a/richardN/django/main/apps/first_app/urls.py b/richardN/django/main/apps/first_app/urls.py new file mode 100644 index 0000000..ec613f9 --- /dev/null +++ b/richardN/django/main/apps/first_app/urls.py @@ -0,0 +1,5 @@ +from django.conf.urls import url +from . import views +urlpatterns = [ + url(r'^$',views.index) +] diff --git a/richardN/django/main/apps/first_app/views.py b/richardN/django/main/apps/first_app/views.py new file mode 100644 index 0000000..adffb9e --- /dev/null +++ b/richardN/django/main/apps/first_app/views.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.shortcuts import render + +# Create your views here. +from django.shortcuts import render, HttpResponse, redirect + +def index(request): + response = "Oh where oh where can my baby be?" + return HttpResponse(response) diff --git a/richardN/django/main/db.sqlite3 b/richardN/django/main/db.sqlite3 new file mode 100644 index 0000000000000000000000000000000000000000..e3d7819f02409a5bddf4ac87ad12a5f25384c909 GIT binary patch literal 3072 zcmeHGJx{|h5VeyECg!duiy={qDuKEakcWyiEg>B;Ri-h)C?Bn3*x@JgBlsO$kXos& z5K~bHpLDjK@80?J?0dKmm67mN>rxoFA{|00xdtGFP;?i4Z7uGs0q!mS%P6_{a?dc! zaXyKAj*B&`z(Ez5Iw##;kETXE7P46t_`TbJAG dHPr`w8(Z8eU==tf1?>DE(`(pXtOEb5z&GKFYXkrQ literal 0 HcmV?d00001 diff --git a/richardN/django/main/main/__init__.py b/richardN/django/main/main/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/richardN/django/main/main/settings.py b/richardN/django/main/main/settings.py new file mode 100644 index 0000000..7ecf185 --- /dev/null +++ b/richardN/django/main/main/settings.py @@ -0,0 +1,122 @@ +""" +Django settings for main project. + +Generated by 'django-admin startproject' using Django 1.11.7. + +For more information on this file, see +https://docs.djangoproject.com/en/1.11/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/1.11/ref/settings/ +""" + +import os + +# Build paths inside the project like this: os.path.join(BASE_DIR, ...) +BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/1.11/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = 'f6whr6cb9=!xh-j)28b=eb$idrb5x^kw4p@i2#58+$aj4w096q' + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +ALLOWED_HOSTS = [] + + +# Application definition + +INSTALLED_APPS = [ + 'apps.blogs_app', + 'apps.first_app', + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', +] + +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 = 'main.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 = 'main.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/1.11/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), + } +} + + +# Password validation +# https://docs.djangoproject.com/en/1.11/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/1.11/topics/i18n/ + +LANGUAGE_CODE = 'en-us' + +TIME_ZONE = 'UTC' + +USE_I18N = True + +USE_L10N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/1.11/howto/static-files/ + +STATIC_URL = '/static/' diff --git a/richardN/django/main/main/urls.py b/richardN/django/main/main/urls.py new file mode 100644 index 0000000..789b033 --- /dev/null +++ b/richardN/django/main/main/urls.py @@ -0,0 +1,23 @@ +"""main URL Configuration + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/1.11/topics/http/urls/ +Examples: +Function views + 1. Add an import: from my_app import views + 2. Add a URL to urlpatterns: url(r'^$', views.home, name='home') +Class-based views + 1. Add an import: from other_app.views import Home + 2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home') +Including another URLconf + 1. Import the include() function: from django.conf.urls import url, include + 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) +""" +from django.conf.urls import url, include +from django.contrib import admin + +urlpatterns = [ + url(r'^',include('apps.blogs_app.urls')), + url(r'^',include('apps.first_app.urls')), + url(r'^admin/', admin.site.urls), +] diff --git a/richardN/django/main/main/wsgi.py b/richardN/django/main/main/wsgi.py new file mode 100644 index 0000000..424f219 --- /dev/null +++ b/richardN/django/main/main/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for main 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/1.11/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "main.settings") + +application = get_wsgi_application() diff --git a/richardN/django/main/manage.py b/richardN/django/main/manage.py new file mode 100644 index 0000000..ad5d3e7 --- /dev/null +++ b/richardN/django/main/manage.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +import os +import sys + +if __name__ == "__main__": + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "main.settings") + try: + from django.core.management import execute_from_command_line + except ImportError: + # The above import may fail for some other reason. Ensure that the + # issue is really that Django is missing to avoid masking other + # exceptions on Python 2. + try: + import django + except ImportError: + raise ImportError( + "Couldn't import Django. Are you sure it's installed and " + "available on your PYTHONPATH environment variable? Did you " + "forget to activate a virtual environment?" + ) + raise + execute_from_command_line(sys.argv) diff --git a/richardN/django/main/templates/page1.html b/richardN/django/main/templates/page1.html new file mode 100644 index 0000000..35c4ff1 --- /dev/null +++ b/richardN/django/main/templates/page1.html @@ -0,0 +1,17 @@ + + + + + page1 + + +

home

+
+ Name: + Location: + FavLang: + Comment: + + Continue + + diff --git a/richardN/django/main/templates/page2.html b/richardN/django/main/templates/page2.html new file mode 100644 index 0000000..ff07ca3 --- /dev/null +++ b/richardN/django/main/templates/page2.html @@ -0,0 +1,19 @@ + + + + + home + + +

page 2

+ + "Home" + + {{form.Name}} + {{form.Location}} + {{form.FavLang}} + {{form.Comment}} + +
+ + From cf1c367f024b9aad60efdabb6779517401237918 Mon Sep 17 00:00:00 2001 From: richnamk Date: Mon, 20 Nov 2017 18:20:00 -0600 Subject: [PATCH 12/18] timeDisplay --- .../django/timeDisp_asign/apps/__init__.py | 0 .../apps/timeDisp_app/__init__.py | 0 .../timeDisp_asign/apps/timeDisp_app/admin.py | 6 + .../timeDisp_asign/apps/timeDisp_app/apps.py | 8 ++ .../apps/timeDisp_app/migrations/__init__.py | 0 .../apps/timeDisp_app/models.py | 6 + .../templates/timeDisp_app/index.html | 2 + .../timeDisp_asign/apps/timeDisp_app/tests.py | 6 + .../timeDisp_asign/apps/timeDisp_app/urls.py | 6 + .../timeDisp_asign/apps/timeDisp_app/views.py | 19 +++ richardN/django/timeDisp_asign/db.sqlite3 | Bin 0 -> 3072 bytes richardN/django/timeDisp_asign/manage.py | 22 ++++ .../timeDisp_asign/timeDisp_asign/__init__.py | 0 .../timeDisp_asign/timeDisp_asign/settings.py | 121 ++++++++++++++++++ .../timeDisp_asign/timeDisp_asign/urls.py | 22 ++++ .../timeDisp_asign/timeDisp_asign/wsgi.py | 16 +++ 16 files changed, 234 insertions(+) create mode 100644 richardN/django/timeDisp_asign/apps/__init__.py create mode 100644 richardN/django/timeDisp_asign/apps/timeDisp_app/__init__.py create mode 100644 richardN/django/timeDisp_asign/apps/timeDisp_app/admin.py create mode 100644 richardN/django/timeDisp_asign/apps/timeDisp_app/apps.py create mode 100644 richardN/django/timeDisp_asign/apps/timeDisp_app/migrations/__init__.py create mode 100644 richardN/django/timeDisp_asign/apps/timeDisp_app/models.py create mode 100644 richardN/django/timeDisp_asign/apps/timeDisp_app/templates/timeDisp_app/index.html create mode 100644 richardN/django/timeDisp_asign/apps/timeDisp_app/tests.py create mode 100644 richardN/django/timeDisp_asign/apps/timeDisp_app/urls.py create mode 100644 richardN/django/timeDisp_asign/apps/timeDisp_app/views.py create mode 100644 richardN/django/timeDisp_asign/db.sqlite3 create mode 100644 richardN/django/timeDisp_asign/manage.py create mode 100644 richardN/django/timeDisp_asign/timeDisp_asign/__init__.py create mode 100644 richardN/django/timeDisp_asign/timeDisp_asign/settings.py create mode 100644 richardN/django/timeDisp_asign/timeDisp_asign/urls.py create mode 100644 richardN/django/timeDisp_asign/timeDisp_asign/wsgi.py diff --git a/richardN/django/timeDisp_asign/apps/__init__.py b/richardN/django/timeDisp_asign/apps/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/richardN/django/timeDisp_asign/apps/timeDisp_app/__init__.py b/richardN/django/timeDisp_asign/apps/timeDisp_app/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/richardN/django/timeDisp_asign/apps/timeDisp_app/admin.py b/richardN/django/timeDisp_asign/apps/timeDisp_app/admin.py new file mode 100644 index 0000000..13be29d --- /dev/null +++ b/richardN/django/timeDisp_asign/apps/timeDisp_app/admin.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.contrib import admin + +# Register your models here. diff --git a/richardN/django/timeDisp_asign/apps/timeDisp_app/apps.py b/richardN/django/timeDisp_asign/apps/timeDisp_app/apps.py new file mode 100644 index 0000000..4290ec1 --- /dev/null +++ b/richardN/django/timeDisp_asign/apps/timeDisp_app/apps.py @@ -0,0 +1,8 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.apps import AppConfig + + +class TimedispAppConfig(AppConfig): + name = 'timeDisp_app' diff --git a/richardN/django/timeDisp_asign/apps/timeDisp_app/migrations/__init__.py b/richardN/django/timeDisp_asign/apps/timeDisp_app/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/richardN/django/timeDisp_asign/apps/timeDisp_app/models.py b/richardN/django/timeDisp_asign/apps/timeDisp_app/models.py new file mode 100644 index 0000000..1dfab76 --- /dev/null +++ b/richardN/django/timeDisp_asign/apps/timeDisp_app/models.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models + +# Create your models here. diff --git a/richardN/django/timeDisp_asign/apps/timeDisp_app/templates/timeDisp_app/index.html b/richardN/django/timeDisp_asign/apps/timeDisp_app/templates/timeDisp_app/index.html new file mode 100644 index 0000000..a7cab8f --- /dev/null +++ b/richardN/django/timeDisp_asign/apps/timeDisp_app/templates/timeDisp_app/index.html @@ -0,0 +1,2 @@ +

The date and time is:

+
{{time}}
diff --git a/richardN/django/timeDisp_asign/apps/timeDisp_app/tests.py b/richardN/django/timeDisp_asign/apps/timeDisp_app/tests.py new file mode 100644 index 0000000..5982e6b --- /dev/null +++ b/richardN/django/timeDisp_asign/apps/timeDisp_app/tests.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.test import TestCase + +# Create your tests here. diff --git a/richardN/django/timeDisp_asign/apps/timeDisp_app/urls.py b/richardN/django/timeDisp_asign/apps/timeDisp_app/urls.py new file mode 100644 index 0000000..8d28477 --- /dev/null +++ b/richardN/django/timeDisp_asign/apps/timeDisp_app/urls.py @@ -0,0 +1,6 @@ +from django.conf.urls import url +from . import views + +urlpatterns = [ + url(r'^$', views.index), +] diff --git a/richardN/django/timeDisp_asign/apps/timeDisp_app/views.py b/richardN/django/timeDisp_asign/apps/timeDisp_app/views.py new file mode 100644 index 0000000..45bbed3 --- /dev/null +++ b/richardN/django/timeDisp_asign/apps/timeDisp_app/views.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.shortcuts import render + +# Create your views here. + # the index function is called when root is visited +from django.shortcuts import render, HttpResponse, redirect +from time import gmtime, strftime + +def index(request): + response = "The Time and Date is:" + return HttpResponse(response) + +def index(request): + context = { + "time": strftime("%Y-%m-%d %H:%M %p", gmtime()) + } + return render(request,'timeDisp_app/index.html', context) \ No newline at end of file diff --git a/richardN/django/timeDisp_asign/db.sqlite3 b/richardN/django/timeDisp_asign/db.sqlite3 new file mode 100644 index 0000000000000000000000000000000000000000..e3d7819f02409a5bddf4ac87ad12a5f25384c909 GIT binary patch literal 3072 zcmeHGJx{|h5VeyECg!duiy={qDuKEakcWyiEg>B;Ri-h)C?Bn3*x@JgBlsO$kXos& z5K~bHpLDjK@80?J?0dKmm67mN>rxoFA{|00xdtGFP;?i4Z7uGs0q!mS%P6_{a?dc! zaXyKAj*B&`z(Ez5Iw##;kETXE7P46t_`TbJAG dHPr`w8(Z8eU==tf1?>DE(`(pXtOEb5z&GKFYXkrQ literal 0 HcmV?d00001 diff --git a/richardN/django/timeDisp_asign/manage.py b/richardN/django/timeDisp_asign/manage.py new file mode 100644 index 0000000..d18003c --- /dev/null +++ b/richardN/django/timeDisp_asign/manage.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +import os +import sys + +if __name__ == "__main__": + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "timeDisp_asign.settings") + try: + from django.core.management import execute_from_command_line + except ImportError: + # The above import may fail for some other reason. Ensure that the + # issue is really that Django is missing to avoid masking other + # exceptions on Python 2. + try: + import django + except ImportError: + raise ImportError( + "Couldn't import Django. Are you sure it's installed and " + "available on your PYTHONPATH environment variable? Did you " + "forget to activate a virtual environment?" + ) + raise + execute_from_command_line(sys.argv) diff --git a/richardN/django/timeDisp_asign/timeDisp_asign/__init__.py b/richardN/django/timeDisp_asign/timeDisp_asign/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/richardN/django/timeDisp_asign/timeDisp_asign/settings.py b/richardN/django/timeDisp_asign/timeDisp_asign/settings.py new file mode 100644 index 0000000..5405113 --- /dev/null +++ b/richardN/django/timeDisp_asign/timeDisp_asign/settings.py @@ -0,0 +1,121 @@ +""" +Django settings for timeDisp_asign project. + +Generated by 'django-admin startproject' using Django 1.11.7. + +For more information on this file, see +https://docs.djangoproject.com/en/1.11/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/1.11/ref/settings/ +""" + +import os + +# Build paths inside the project like this: os.path.join(BASE_DIR, ...) +BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/1.11/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = '@1z1ix4ca@g0@%dw7j8s4g=--6j^m#9cxlps7ac)4-(ubvh6s7' + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +ALLOWED_HOSTS = [] + + +# Application definition + +INSTALLED_APPS = [ + 'apps.timeDisp_app', + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', +] + +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 = 'timeDisp_asign.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 = 'timeDisp_asign.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/1.11/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), + } +} + + +# Password validation +# https://docs.djangoproject.com/en/1.11/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/1.11/topics/i18n/ + +LANGUAGE_CODE = 'en-us' + +TIME_ZONE = 'UTC' + +USE_I18N = True + +USE_L10N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/1.11/howto/static-files/ + +STATIC_URL = '/static/' diff --git a/richardN/django/timeDisp_asign/timeDisp_asign/urls.py b/richardN/django/timeDisp_asign/timeDisp_asign/urls.py new file mode 100644 index 0000000..d4f6636 --- /dev/null +++ b/richardN/django/timeDisp_asign/timeDisp_asign/urls.py @@ -0,0 +1,22 @@ +"""timeDisp_asign URL Configuration + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/1.11/topics/http/urls/ +Examples: +Function views + 1. Add an import: from my_app import views + 2. Add a URL to urlpatterns: url(r'^$', views.home, name='home') +Class-based views + 1. Add an import: from other_app.views import Home + 2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home') +Including another URLconf + 1. Import the include() function: from django.conf.urls import url, include + 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) +""" +from django.conf.urls import url, include +from django.contrib import admin + +urlpatterns = [ + url(r'^', include('apps.timeDisp_app.urls')), + url(r'^admin/', admin.site.urls), +] diff --git a/richardN/django/timeDisp_asign/timeDisp_asign/wsgi.py b/richardN/django/timeDisp_asign/timeDisp_asign/wsgi.py new file mode 100644 index 0000000..e82a789 --- /dev/null +++ b/richardN/django/timeDisp_asign/timeDisp_asign/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for timeDisp_asign 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/1.11/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "timeDisp_asign.settings") + +application = get_wsgi_application() From 1528bbabe1bd33f265bf5b3f34d308e9a6d89fbb Mon Sep 17 00:00:00 2001 From: richnamk Date: Mon, 20 Nov 2017 18:23:41 -0600 Subject: [PATCH 13/18] addingMore --- .../friendships/dataBase/friends.sql | 33 ++++ richardN/flaskMySQL/friendships/server.py | 15 ++ .../friendships/templates/index.html | 23 +++ richardN/flaskMySQL/mySQLconnection.py | 40 +++++ richardN/flaskMySQL/server.py | 17 ++ .../mySqlQueries/friendships/friendships.mwb | Bin 9700 -> 9704 bytes .../friendships/friendships.mwb.bak | Bin 0 -> 9700 bytes richardN/sqlFlask/server.py | 149 ++++++++++++++++++ 8 files changed, 277 insertions(+) create mode 100644 richardN/flaskMySQL/friendships/dataBase/friends.sql create mode 100644 richardN/flaskMySQL/friendships/server.py create mode 100644 richardN/flaskMySQL/friendships/templates/index.html create mode 100644 richardN/flaskMySQL/mySQLconnection.py create mode 100644 richardN/flaskMySQL/server.py create mode 100644 richardN/mySqlQueries/friendships/friendships.mwb.bak create mode 100644 richardN/sqlFlask/server.py diff --git a/richardN/flaskMySQL/friendships/dataBase/friends.sql b/richardN/flaskMySQL/friendships/dataBase/friends.sql new file mode 100644 index 0000000..0f7af16 --- /dev/null +++ b/richardN/flaskMySQL/friendships/dataBase/friends.sql @@ -0,0 +1,33 @@ +-- MySQL Workbench Forward Engineering + +SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0; +SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; +SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES'; + +-- ----------------------------------------------------- +-- Schema mydb +-- ----------------------------------------------------- + +-- ----------------------------------------------------- +-- Schema mydb +-- ----------------------------------------------------- +CREATE SCHEMA IF NOT EXISTS `friendsdb` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ; +USE `friendsdb` ; + +-- ----------------------------------------------------- +-- Table `mydb`.`friends` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `friendsdb`.`friends` ( + `id` INT NOT NULL AUTO_INCREMENT, + `first_name` VARCHAR(45) NULL, + `last_name` VARCHAR(45) NULL, + `occupation` VARCHAR(45) NULL, + `created_at` DATETIME NULL, + `updated_at` DATETIME NULL, + PRIMARY KEY (`id`)) +ENGINE = InnoDB; + + +SET SQL_MODE=@OLD_SQL_MODE; +SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; +SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS; diff --git a/richardN/flaskMySQL/friendships/server.py b/richardN/flaskMySQL/friendships/server.py new file mode 100644 index 0000000..b62ffac --- /dev/null +++ b/richardN/flaskMySQL/friendships/server.py @@ -0,0 +1,15 @@ +from flask import Flask, request, redirect, render_template, session, flash +from mysqlconnection import MySQLConnector +app = Flask(__name__) +mysql = MySQLConnector(app,'friendsdb') +@app.route('/') +def index(): + friends = mysql.query_db("SELECT * FROM friends") + print friends + return render_template('index.html') +@app.route('/friends', methods=['POST']) +def create(): + # add a friend to the database! + return redirect('/') + +app.run(debug=True) diff --git a/richardN/flaskMySQL/friendships/templates/index.html b/richardN/flaskMySQL/friendships/templates/index.html new file mode 100644 index 0000000..f8adff9 --- /dev/null +++ b/richardN/flaskMySQL/friendships/templates/index.html @@ -0,0 +1,23 @@ + + + Friends + + +

These are all my friends!

+

First Name: Jay

+

Last Name: Patel

+

Occupation: Instructor

+
+

First Name: Jimmy

+

Last Name: Jun

+

Occupation: Instructor

+
+

Add a Friend

+
+ + + + +
+ + diff --git a/richardN/flaskMySQL/mySQLconnection.py b/richardN/flaskMySQL/mySQLconnection.py new file mode 100644 index 0000000..a12daeb --- /dev/null +++ b/richardN/flaskMySQL/mySQLconnection.py @@ -0,0 +1,40 @@ +""" import the necessary modules """ +from flask_sqlalchemy import SQLAlchemy +from sqlalchemy.sql import text +# Create a class that will give us an object that we can use to connect to a database +class MySQLConnection(object): + def __init__(self, app, db): + config = { + 'host': 'localhost', + 'database': db, # we got db as an argument + 'user': 'root', + 'password': 'root', + 'port': '3306' # change the port to match the port your SQL server is running on + } + # this will use the above values to generate the path to connect to your sql database + DATABASE_URI = "mysql://{}:{}@127.0.0.1:{}/{}".format(config['user'], config['password'], config['port'], config['database']) + app.config['SQLALCHEMY_DATABASE_URI'] = DATABASE_URI + app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True + # establish the connection to database + self.db = SQLAlchemy(app) + # this is the method we will use to query the database + def query_db(self, query, data=None): + result = self.db.session.execute(text(query), data) + if query[0:6].lower() == 'select': + # if the query was a select + # convert the result to a list of dictionaries + list_result = [dict(r) for r in result] + # return the results as a list of dictionaries + return list_result + elif query[0:6].lower() == 'insert': + # if the query was an insert, return the id of the + # commit changes + self.db.session.commit() + # row that was inserted + return result.lastrowid + else: + # if the query was an update or delete, return nothing and commit changes + self.db.session.commit() +# This is the module method to be called by the user in server.py. Make sure to provide the db name! +def MySQLConnector(app, db): + return MySQLConnection(app, db) diff --git a/richardN/flaskMySQL/server.py b/richardN/flaskMySQL/server.py new file mode 100644 index 0000000..c6f96e5 --- /dev/null +++ b/richardN/flaskMySQL/server.py @@ -0,0 +1,17 @@ +from flask import Flask +# import the Connector function +from mySQLconnection import MySQLConnector +app = Flask(__name__) +# connect and store the connection in "mysql"; note that you pass the database name to the function +mysql = MySQLConnector(app, 'mydb') +# an example of running a query +print mysql.query_db("SELECT * FROM users") +config = { + 'host': 'localhost', + 'database': db, # we got db as an argument + 'user': 'root', + 'password': 'fml', + 'port': '3306' # change the port to match the port your SQL server is running on +} + +app.run(debug=True) diff --git a/richardN/mySqlQueries/friendships/friendships.mwb b/richardN/mySqlQueries/friendships/friendships.mwb index 7d9173ff96e5a9ffc15dc29a8f182f7ad1684031..33ccbd174efb562a231b3738f3532e364967497e 100644 GIT binary patch delta 6915 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 diff --git a/richardN/mySqlQueries/friendships/friendships.mwb.bak b/richardN/mySqlQueries/friendships/friendships.mwb.bak new file mode 100644 index 0000000000000000000000000000000000000000..7d9173ff96e5a9ffc15dc29a8f182f7ad1684031 GIT binary patch literal 9700 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 abT+Xtvo&(&CKY$GG_x~xwy< 0: + user = users[0] + session['user_id'] = user['id'] + return redirect('/wall') + else: + flash("Login failed") + return redirect ('/') + else: + flash("User not found") + return redirect ('/') + +@app.route('/logoff') +def logoff(): + session.pop('user_id') + return redirect('/') + +@app.route('/wall') +def wall(): + if 'user_id' not in session: + return redirect('/') + + query = "SELECT messages.id, messages.message, users.first_name AS user FROM messages JOIN users on users.id = messages.user_id ORDER BY 'created_at' DESC" + messages = mysql.query_db(query) + + query = "SELECT comments.id, comment, message_id, first_name AS user FROM comments JOIN users on users.id = comments.user_id ORDER BY 'created_at' DESC" + comments = mysql.query_db(query) + + mysql.query_db(query) + return render_template('wall.html', messages=messages, comments=comments) + +@app.route('/messages', methods=["post"]) +def newMessage(): + message = request.form['message'] + if message =="": + return redirect('/wall') + + query = "INSERT INTO messages (message, user_id, created_at) VALUES (:message, :user_id, NOW())" + data = {'message':message, 'user_id': session['user_id']} + + mysql.query_db(query, data) + return redirect('/wall') + +@app.route('/comments', methods=["post"]) +def newComment(): + message_id = request.form['message_id'] + comment = request.form['comment'] + + if comment =="": + return redirect('/wall') + + query = "INSERT INTO comments (comment, created_at, message_id, user_id) VALUES (:comment, NOW(), :message_id, :user_id)" + data = {'comment':comment, 'message_id':message_id, 'user_id': session['user_id']} + + mysql.query_db(query, data) + return redirect('/wall') + + + + + +app.run(debug=True) From c3f35cea126f1e67dc5c1e4ef9a349b1b1718717 Mon Sep 17 00:00:00 2001 From: richnamk Date: Mon, 20 Nov 2017 19:26:35 -0600 Subject: [PATCH 14/18] random --- richardN/django/randomWg/apps/__init__.py | 0 .../randomWg/apps/randomWg_app/__init__.py | 0 .../randomWg/apps/randomWg_app/admin.py | 6 + .../django/randomWg/apps/randomWg_app/apps.py | 8 ++ .../apps/randomWg_app/migrations/__init__.py | 0 .../randomWg/apps/randomWg_app/models.py | 6 + .../templates/randomWg_app/index.html | 11 ++ .../randomWg/apps/randomWg_app/tests.py | 6 + .../django/randomWg/apps/randomWg_app/urls.py | 7 + .../randomWg/apps/randomWg_app/views.py | 18 +++ richardN/django/randomWg/db.sqlite3 | Bin 0 -> 3072 bytes richardN/django/randomWg/manage.py | 22 ++++ richardN/django/randomWg/randomWg/__init__.py | 0 richardN/django/randomWg/randomWg/settings.py | 121 ++++++++++++++++++ richardN/django/randomWg/randomWg/urls.py | 22 ++++ richardN/django/randomWg/randomWg/wsgi.py | 16 +++ .../timeDisp_asign/apps/timeDisp_app/views.py | 2 +- 17 files changed, 244 insertions(+), 1 deletion(-) create mode 100644 richardN/django/randomWg/apps/__init__.py create mode 100644 richardN/django/randomWg/apps/randomWg_app/__init__.py create mode 100644 richardN/django/randomWg/apps/randomWg_app/admin.py create mode 100644 richardN/django/randomWg/apps/randomWg_app/apps.py create mode 100644 richardN/django/randomWg/apps/randomWg_app/migrations/__init__.py create mode 100644 richardN/django/randomWg/apps/randomWg_app/models.py create mode 100644 richardN/django/randomWg/apps/randomWg_app/templates/randomWg_app/index.html create mode 100644 richardN/django/randomWg/apps/randomWg_app/tests.py create mode 100644 richardN/django/randomWg/apps/randomWg_app/urls.py create mode 100644 richardN/django/randomWg/apps/randomWg_app/views.py create mode 100644 richardN/django/randomWg/db.sqlite3 create mode 100644 richardN/django/randomWg/manage.py create mode 100644 richardN/django/randomWg/randomWg/__init__.py create mode 100644 richardN/django/randomWg/randomWg/settings.py create mode 100644 richardN/django/randomWg/randomWg/urls.py create mode 100644 richardN/django/randomWg/randomWg/wsgi.py diff --git a/richardN/django/randomWg/apps/__init__.py b/richardN/django/randomWg/apps/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/richardN/django/randomWg/apps/randomWg_app/__init__.py b/richardN/django/randomWg/apps/randomWg_app/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/richardN/django/randomWg/apps/randomWg_app/admin.py b/richardN/django/randomWg/apps/randomWg_app/admin.py new file mode 100644 index 0000000..13be29d --- /dev/null +++ b/richardN/django/randomWg/apps/randomWg_app/admin.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.contrib import admin + +# Register your models here. diff --git a/richardN/django/randomWg/apps/randomWg_app/apps.py b/richardN/django/randomWg/apps/randomWg_app/apps.py new file mode 100644 index 0000000..a8ba34f --- /dev/null +++ b/richardN/django/randomWg/apps/randomWg_app/apps.py @@ -0,0 +1,8 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.apps import AppConfig + + +class RandomwgAppConfig(AppConfig): + name = 'randomWg_app' diff --git a/richardN/django/randomWg/apps/randomWg_app/migrations/__init__.py b/richardN/django/randomWg/apps/randomWg_app/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/richardN/django/randomWg/apps/randomWg_app/models.py b/richardN/django/randomWg/apps/randomWg_app/models.py new file mode 100644 index 0000000..1dfab76 --- /dev/null +++ b/richardN/django/randomWg/apps/randomWg_app/models.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models + +# Create your models here. diff --git a/richardN/django/randomWg/apps/randomWg_app/templates/randomWg_app/index.html b/richardN/django/randomWg/apps/randomWg_app/templates/randomWg_app/index.html new file mode 100644 index 0000000..f24a15c --- /dev/null +++ b/richardN/django/randomWg/apps/randomWg_app/templates/randomWg_app/index.html @@ -0,0 +1,11 @@ + +

Random word attempt #{{request.session.count}}

+

{{random}}

+
+ {% csrf_token %} + +
+
+ {% csrf_token %} + +
diff --git a/richardN/django/randomWg/apps/randomWg_app/tests.py b/richardN/django/randomWg/apps/randomWg_app/tests.py new file mode 100644 index 0000000..5982e6b --- /dev/null +++ b/richardN/django/randomWg/apps/randomWg_app/tests.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.test import TestCase + +# Create your tests here. diff --git a/richardN/django/randomWg/apps/randomWg_app/urls.py b/richardN/django/randomWg/apps/randomWg_app/urls.py new file mode 100644 index 0000000..942faa8 --- /dev/null +++ b/richardN/django/randomWg/apps/randomWg_app/urls.py @@ -0,0 +1,7 @@ +from django.conf.urls import url +from . import views + +urlpatterns = [ + url(r'^$', views.index), + url(r'reset$', views.reset) +] \ No newline at end of file diff --git a/richardN/django/randomWg/apps/randomWg_app/views.py b/richardN/django/randomWg/apps/randomWg_app/views.py new file mode 100644 index 0000000..95cb4ae --- /dev/null +++ b/richardN/django/randomWg/apps/randomWg_app/views.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- +from django.shortcuts import render, HttpResponse, redirect +from django.utils.crypto import get_random_string + +def index(request): + if 'count' not in request.session: + request.session['count'] = 0 + else: + request.session['count'] += 1 + + content = { + 'random': get_random_string(length=14) + } + return render(request, 'randomWg_app/index.html', content) + +def reset(request): + del request.session['count'] + return redirect(index) \ No newline at end of file diff --git a/richardN/django/randomWg/db.sqlite3 b/richardN/django/randomWg/db.sqlite3 new file mode 100644 index 0000000000000000000000000000000000000000..e3d7819f02409a5bddf4ac87ad12a5f25384c909 GIT binary patch literal 3072 zcmeHGJx{|h5VeyECg!duiy={qDuKEakcWyiEg>B;Ri-h)C?Bn3*x@JgBlsO$kXos& z5K~bHpLDjK@80?J?0dKmm67mN>rxoFA{|00xdtGFP;?i4Z7uGs0q!mS%P6_{a?dc! zaXyKAj*B&`z(Ez5Iw##;kETXE7P46t_`TbJAG dHPr`w8(Z8eU==tf1?>DE(`(pXtOEb5z&GKFYXkrQ literal 0 HcmV?d00001 diff --git a/richardN/django/randomWg/manage.py b/richardN/django/randomWg/manage.py new file mode 100644 index 0000000..baa19f8 --- /dev/null +++ b/richardN/django/randomWg/manage.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +import os +import sys + +if __name__ == "__main__": + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "randomWg.settings") + try: + from django.core.management import execute_from_command_line + except ImportError: + # The above import may fail for some other reason. Ensure that the + # issue is really that Django is missing to avoid masking other + # exceptions on Python 2. + try: + import django + except ImportError: + raise ImportError( + "Couldn't import Django. Are you sure it's installed and " + "available on your PYTHONPATH environment variable? Did you " + "forget to activate a virtual environment?" + ) + raise + execute_from_command_line(sys.argv) diff --git a/richardN/django/randomWg/randomWg/__init__.py b/richardN/django/randomWg/randomWg/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/richardN/django/randomWg/randomWg/settings.py b/richardN/django/randomWg/randomWg/settings.py new file mode 100644 index 0000000..a7b1da9 --- /dev/null +++ b/richardN/django/randomWg/randomWg/settings.py @@ -0,0 +1,121 @@ +""" +Django settings for randomWg project. + +Generated by 'django-admin startproject' using Django 1.11.7. + +For more information on this file, see +https://docs.djangoproject.com/en/1.11/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/1.11/ref/settings/ +""" + +import os + +# Build paths inside the project like this: os.path.join(BASE_DIR, ...) +BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/1.11/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = '3ih2hc31eb=jbfcwtp*o_+quf3y+4!qsk(o0_ju#^l*h2(9m1h' + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +ALLOWED_HOSTS = [] + + +# Application definition + +INSTALLED_APPS = [ + 'apps.randomWg_app', + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', +] + +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 = 'randomWg.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 = 'randomWg.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/1.11/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), + } +} + + +# Password validation +# https://docs.djangoproject.com/en/1.11/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/1.11/topics/i18n/ + +LANGUAGE_CODE = 'en-us' + +TIME_ZONE = 'UTC' + +USE_I18N = True + +USE_L10N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/1.11/howto/static-files/ + +STATIC_URL = '/static/' diff --git a/richardN/django/randomWg/randomWg/urls.py b/richardN/django/randomWg/randomWg/urls.py new file mode 100644 index 0000000..7595cf9 --- /dev/null +++ b/richardN/django/randomWg/randomWg/urls.py @@ -0,0 +1,22 @@ +"""randomWg URL Configuration + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/1.11/topics/http/urls/ +Examples: +Function views + 1. Add an import: from my_app import views + 2. Add a URL to urlpatterns: url(r'^$', views.home, name='home') +Class-based views + 1. Add an import: from other_app.views import Home + 2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home') +Including another URLconf + 1. Import the include() function: from django.conf.urls import url, include + 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) +""" +from django.conf.urls import url, include +from django.contrib import admin + +urlpatterns = [ + url(r'^', include('apps.randomWg_app.urls')), + url(r'^admin/', admin.site.urls), +] diff --git a/richardN/django/randomWg/randomWg/wsgi.py b/richardN/django/randomWg/randomWg/wsgi.py new file mode 100644 index 0000000..27fb582 --- /dev/null +++ b/richardN/django/randomWg/randomWg/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for randomWg 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/1.11/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "randomWg.settings") + +application = get_wsgi_application() diff --git a/richardN/django/timeDisp_asign/apps/timeDisp_app/views.py b/richardN/django/timeDisp_asign/apps/timeDisp_app/views.py index 45bbed3..eae69d8 100644 --- a/richardN/django/timeDisp_asign/apps/timeDisp_app/views.py +++ b/richardN/django/timeDisp_asign/apps/timeDisp_app/views.py @@ -9,7 +9,7 @@ from time import gmtime, strftime def index(request): - response = "The Time and Date is:" + response = "The Date and Time is:" return HttpResponse(response) def index(request): From 8c114548fd4eae01a48b63e1f1213e03877952d5 Mon Sep 17 00:00:00 2001 From: richnamk Date: Mon, 20 Nov 2017 20:10:03 -0600 Subject: [PATCH 15/18] randomWorks --- .../templates/randomWg_app/index.html | 32 ++++++++++++------ .../django/randomWg/apps/randomWg_app/urls.py | 2 +- .../randomWg/apps/randomWg_app/views.py | 1 - richardN/django/randomWg/db.sqlite3 | Bin 3072 -> 37888 bytes 4 files changed, 22 insertions(+), 13 deletions(-) diff --git a/richardN/django/randomWg/apps/randomWg_app/templates/randomWg_app/index.html b/richardN/django/randomWg/apps/randomWg_app/templates/randomWg_app/index.html index f24a15c..5aa3628 100644 --- a/richardN/django/randomWg/apps/randomWg_app/templates/randomWg_app/index.html +++ b/richardN/django/randomWg/apps/randomWg_app/templates/randomWg_app/index.html @@ -1,11 +1,21 @@ - -

Random word attempt #{{request.session.count}}

-

{{random}}

-
- {% csrf_token %} - -
-
- {% csrf_token %} - -
+ + + + + + + Display Time + + +

Random attempt #{{request.session.count}}

+

{{random}}

+
+ {% csrf_token %} + +
+
+ {% csrf_token %} + +
+ + \ No newline at end of file diff --git a/richardN/django/randomWg/apps/randomWg_app/urls.py b/richardN/django/randomWg/apps/randomWg_app/urls.py index 942faa8..a987c12 100644 --- a/richardN/django/randomWg/apps/randomWg_app/urls.py +++ b/richardN/django/randomWg/apps/randomWg_app/urls.py @@ -3,5 +3,5 @@ urlpatterns = [ url(r'^$', views.index), - url(r'reset$', views.reset) + url(r'reset$', views.reset), ] \ No newline at end of file diff --git a/richardN/django/randomWg/apps/randomWg_app/views.py b/richardN/django/randomWg/apps/randomWg_app/views.py index 95cb4ae..a85bacb 100644 --- a/richardN/django/randomWg/apps/randomWg_app/views.py +++ b/richardN/django/randomWg/apps/randomWg_app/views.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- from django.shortcuts import render, HttpResponse, redirect from django.utils.crypto import get_random_string diff --git a/richardN/django/randomWg/db.sqlite3 b/richardN/django/randomWg/db.sqlite3 index e3d7819f02409a5bddf4ac87ad12a5f25384c909..db17c48d329cb40ebfcf64f311dc1f991d223460 100644 GIT binary patch literal 37888 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 T;#|1ZM#oO&RN47VrvCm5vFW%M delta 74 zcmZoz!PFozL0XWJfq{V;h+%+nqK+|8Q1=-#FHney=@J983e%;{iX2Hylcxv Date: Mon, 20 Nov 2017 21:44:15 -0600 Subject: [PATCH 16/18] coursesWrongTitleReallySurvey --- richardN/django/courses/apps/__init__.py | 0 .../courses/apps/courses_app/__init__.py | 0 .../django/courses/apps/courses_app/admin.py | 6 + .../django/courses/apps/courses_app/apps.py | 8 ++ .../apps/courses_app/migrations/__init__.py | 0 .../django/courses/apps/courses_app/models.py | 6 + .../templates/courses_app/index.html | 32 +++++ .../templates/courses_app/results.html | 13 ++ .../django/courses/apps/courses_app/tests.py | 6 + .../django/courses/apps/courses_app/urls.py | 7 + .../django/courses/apps/courses_app/views.py | 20 +++ richardN/django/courses/courses/__init__.py | 0 richardN/django/courses/courses/settings.py | 121 ++++++++++++++++++ richardN/django/courses/courses/urls.py | 22 ++++ richardN/django/courses/courses/wsgi.py | 16 +++ richardN/django/courses/db.sqlite3 | Bin 0 -> 37888 bytes richardN/django/courses/manage.py | 22 ++++ richardN/django/randomWg/db.sqlite3 | Bin 37888 -> 37888 bytes 18 files changed, 279 insertions(+) create mode 100644 richardN/django/courses/apps/__init__.py create mode 100644 richardN/django/courses/apps/courses_app/__init__.py create mode 100644 richardN/django/courses/apps/courses_app/admin.py create mode 100644 richardN/django/courses/apps/courses_app/apps.py create mode 100644 richardN/django/courses/apps/courses_app/migrations/__init__.py create mode 100644 richardN/django/courses/apps/courses_app/models.py create mode 100644 richardN/django/courses/apps/courses_app/templates/courses_app/index.html create mode 100644 richardN/django/courses/apps/courses_app/templates/courses_app/results.html create mode 100644 richardN/django/courses/apps/courses_app/tests.py create mode 100644 richardN/django/courses/apps/courses_app/urls.py create mode 100644 richardN/django/courses/apps/courses_app/views.py create mode 100644 richardN/django/courses/courses/__init__.py create mode 100644 richardN/django/courses/courses/settings.py create mode 100644 richardN/django/courses/courses/urls.py create mode 100644 richardN/django/courses/courses/wsgi.py create mode 100644 richardN/django/courses/db.sqlite3 create mode 100644 richardN/django/courses/manage.py diff --git a/richardN/django/courses/apps/__init__.py b/richardN/django/courses/apps/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/richardN/django/courses/apps/courses_app/__init__.py b/richardN/django/courses/apps/courses_app/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/richardN/django/courses/apps/courses_app/admin.py b/richardN/django/courses/apps/courses_app/admin.py new file mode 100644 index 0000000..13be29d --- /dev/null +++ b/richardN/django/courses/apps/courses_app/admin.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.contrib import admin + +# Register your models here. diff --git a/richardN/django/courses/apps/courses_app/apps.py b/richardN/django/courses/apps/courses_app/apps.py new file mode 100644 index 0000000..610c60e --- /dev/null +++ b/richardN/django/courses/apps/courses_app/apps.py @@ -0,0 +1,8 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.apps import AppConfig + + +class CourcesAppConfig(AppConfig): + name = 'cources_app' diff --git a/richardN/django/courses/apps/courses_app/migrations/__init__.py b/richardN/django/courses/apps/courses_app/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/richardN/django/courses/apps/courses_app/models.py b/richardN/django/courses/apps/courses_app/models.py new file mode 100644 index 0000000..1dfab76 --- /dev/null +++ b/richardN/django/courses/apps/courses_app/models.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models + +# Create your models here. diff --git a/richardN/django/courses/apps/courses_app/templates/courses_app/index.html b/richardN/django/courses/apps/courses_app/templates/courses_app/index.html new file mode 100644 index 0000000..56c28e2 --- /dev/null +++ b/richardN/django/courses/apps/courses_app/templates/courses_app/index.html @@ -0,0 +1,32 @@ + + + + + Surveys + + +
+ {% csrf_token %} +

Your Name:

+ +

Dojo Location:

+ +

Favorite Language:

+ +
+
+ +
+ + diff --git a/richardN/django/courses/apps/courses_app/templates/courses_app/results.html b/richardN/django/courses/apps/courses_app/templates/courses_app/results.html new file mode 100644 index 0000000..fd7f0d4 --- /dev/null +++ b/richardN/django/courses/apps/courses_app/templates/courses_app/results.html @@ -0,0 +1,13 @@ + + + + + Result + + +

Submitted Information

+

Name: {{request.session.name}}

+

Location: {{request.session.location}}

+

Language: {{request.session.language}}

+ + \ No newline at end of file diff --git a/richardN/django/courses/apps/courses_app/tests.py b/richardN/django/courses/apps/courses_app/tests.py new file mode 100644 index 0000000..5982e6b --- /dev/null +++ b/richardN/django/courses/apps/courses_app/tests.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.test import TestCase + +# Create your tests here. diff --git a/richardN/django/courses/apps/courses_app/urls.py b/richardN/django/courses/apps/courses_app/urls.py new file mode 100644 index 0000000..d4d7047 --- /dev/null +++ b/richardN/django/courses/apps/courses_app/urls.py @@ -0,0 +1,7 @@ +from django.conf.urls import url +from . import views +urlpatterns = [ + url(r'^$', views.index), + url(r'^courses/process$', views.process), + url(r'^results', views.result), +] \ No newline at end of file diff --git a/richardN/django/courses/apps/courses_app/views.py b/richardN/django/courses/apps/courses_app/views.py new file mode 100644 index 0000000..3728ce7 --- /dev/null +++ b/richardN/django/courses/apps/courses_app/views.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.shortcuts import render, redirect + +# Create your views here. +def index(request): + return render(request, 'courses_app/index.html') + +def process(request): + if request.method == 'POST': + form_data = request.POST + request.session['name'] = form_data['name'] + request.session['location'] = form_data['location'] + request.session['language'] = form_data['language'] + + return redirect('/results') + +def result(request): + return render(request, 'courses_app/results.html') \ No newline at end of file diff --git a/richardN/django/courses/courses/__init__.py b/richardN/django/courses/courses/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/richardN/django/courses/courses/settings.py b/richardN/django/courses/courses/settings.py new file mode 100644 index 0000000..f26ccb6 --- /dev/null +++ b/richardN/django/courses/courses/settings.py @@ -0,0 +1,121 @@ +""" +Django settings for courses project. + +Generated by 'django-admin startproject' using Django 1.11.7. + +For more information on this file, see +https://docs.djangoproject.com/en/1.11/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/1.11/ref/settings/ +""" + +import os + +# Build paths inside the project like this: os.path.join(BASE_DIR, ...) +BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/1.11/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = '(q*6puo-_9*5#2k4@&&4&#*3q&yjm8m0uk9%dem)c$4=x$jkiv' + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +ALLOWED_HOSTS = [] + + +# Application definition + +INSTALLED_APPS = [ + 'apps.courses_app', + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', +] + +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 = 'courses.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 = 'courses.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/1.11/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), + } +} + + +# Password validation +# https://docs.djangoproject.com/en/1.11/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/1.11/topics/i18n/ + +LANGUAGE_CODE = 'en-us' + +TIME_ZONE = 'UTC' + +USE_I18N = True + +USE_L10N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/1.11/howto/static-files/ + +STATIC_URL = '/static/' diff --git a/richardN/django/courses/courses/urls.py b/richardN/django/courses/courses/urls.py new file mode 100644 index 0000000..ec1e0c5 --- /dev/null +++ b/richardN/django/courses/courses/urls.py @@ -0,0 +1,22 @@ +"""courses URL Configuration + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/1.11/topics/http/urls/ +Examples: +Function views + 1. Add an import: from my_app import views + 2. Add a URL to urlpatterns: url(r'^$', views.home, name='home') +Class-based views + 1. Add an import: from other_app.views import Home + 2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home') +Including another URLconf + 1. Import the include() function: from django.conf.urls import url, include + 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) +""" +from django.conf.urls import url, include +from django.contrib import admin + +urlpatterns = [ + url(r'^', include('apps.courses_app.urls')), + url(r'^admin/', admin.site.urls), +] diff --git a/richardN/django/courses/courses/wsgi.py b/richardN/django/courses/courses/wsgi.py new file mode 100644 index 0000000..d29b7c7 --- /dev/null +++ b/richardN/django/courses/courses/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for courses 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/1.11/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "courses.settings") + +application = get_wsgi_application() diff --git a/richardN/django/courses/db.sqlite3 b/richardN/django/courses/db.sqlite3 new file mode 100644 index 0000000000000000000000000000000000000000..561349d65dbb7f33a8a0fec3f54a8d0b4fe1696a GIT binary patch literal 37888 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 C-p4Qi literal 0 HcmV?d00001 diff --git a/richardN/django/courses/manage.py b/richardN/django/courses/manage.py new file mode 100644 index 0000000..7594c9c --- /dev/null +++ b/richardN/django/courses/manage.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +import os +import sys + +if __name__ == "__main__": + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "courses.settings") + try: + from django.core.management import execute_from_command_line + except ImportError: + # The above import may fail for some other reason. Ensure that the + # issue is really that Django is missing to avoid masking other + # exceptions on Python 2. + try: + import django + except ImportError: + raise ImportError( + "Couldn't import Django. Are you sure it's installed and " + "available on your PYTHONPATH environment variable? Did you " + "forget to activate a virtual environment?" + ) + raise + execute_from_command_line(sys.argv) diff --git a/richardN/django/randomWg/db.sqlite3 b/richardN/django/randomWg/db.sqlite3 index db17c48d329cb40ebfcf64f311dc1f991d223460..adf6f615e0fa97615f31b95dc23ce0238ed442da 100644 GIT binary patch delta 52 xcmZoz!PKyVX@WGP#Y7orMvILJQ Date: Tue, 21 Nov 2017 00:29:42 -0600 Subject: [PATCH 17/18] sleepy --- .../django/session_words/apps/__init__.py | 0 .../apps/session_app/__init__.py | 0 .../session_words/apps/session_app/admin.py | 6 + .../session_words/apps/session_app/apps.py | 8 ++ .../apps/session_app/migrations/__init__.py | 0 .../session_words/apps/session_app/models.py | 6 + .../static/session_app/css/style.css | 12 ++ .../templates/session_app/index.html | 48 +++++++ .../session_words/apps/session_app/tests.py | 6 + .../session_words/apps/session_app/urls.py | 7 + .../session_words/apps/session_app/views.py | 29 +++++ richardN/django/session_words/db.sqlite3 | Bin 0 -> 37888 bytes richardN/django/session_words/manage.py | 22 ++++ .../session_words/session_words/__init__.py | 0 .../session_words/session_words/settings.py | 121 ++++++++++++++++++ .../session_words/session_words/urls.py | 22 ++++ .../session_words/session_words/wsgi.py | 16 +++ 17 files changed, 303 insertions(+) create mode 100644 richardN/django/session_words/apps/__init__.py create mode 100644 richardN/django/session_words/apps/session_app/__init__.py create mode 100644 richardN/django/session_words/apps/session_app/admin.py create mode 100644 richardN/django/session_words/apps/session_app/apps.py create mode 100644 richardN/django/session_words/apps/session_app/migrations/__init__.py create mode 100644 richardN/django/session_words/apps/session_app/models.py create mode 100644 richardN/django/session_words/apps/session_app/static/session_app/css/style.css create mode 100644 richardN/django/session_words/apps/session_app/templates/session_app/index.html create mode 100644 richardN/django/session_words/apps/session_app/tests.py create mode 100644 richardN/django/session_words/apps/session_app/urls.py create mode 100644 richardN/django/session_words/apps/session_app/views.py create mode 100644 richardN/django/session_words/db.sqlite3 create mode 100644 richardN/django/session_words/manage.py create mode 100644 richardN/django/session_words/session_words/__init__.py create mode 100644 richardN/django/session_words/session_words/settings.py create mode 100644 richardN/django/session_words/session_words/urls.py create mode 100644 richardN/django/session_words/session_words/wsgi.py diff --git a/richardN/django/session_words/apps/__init__.py b/richardN/django/session_words/apps/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/richardN/django/session_words/apps/session_app/__init__.py b/richardN/django/session_words/apps/session_app/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/richardN/django/session_words/apps/session_app/admin.py b/richardN/django/session_words/apps/session_app/admin.py new file mode 100644 index 0000000..13be29d --- /dev/null +++ b/richardN/django/session_words/apps/session_app/admin.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.contrib import admin + +# Register your models here. diff --git a/richardN/django/session_words/apps/session_app/apps.py b/richardN/django/session_words/apps/session_app/apps.py new file mode 100644 index 0000000..58b75c3 --- /dev/null +++ b/richardN/django/session_words/apps/session_app/apps.py @@ -0,0 +1,8 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.apps import AppConfig + + +class SessionAppConfig(AppConfig): + name = 'session_app' diff --git a/richardN/django/session_words/apps/session_app/migrations/__init__.py b/richardN/django/session_words/apps/session_app/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/richardN/django/session_words/apps/session_app/models.py b/richardN/django/session_words/apps/session_app/models.py new file mode 100644 index 0000000..1dfab76 --- /dev/null +++ b/richardN/django/session_words/apps/session_app/models.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models + +# Create your models here. diff --git a/richardN/django/session_words/apps/session_app/static/session_app/css/style.css b/richardN/django/session_words/apps/session_app/static/session_app/css/style.css new file mode 100644 index 0000000..50bd674 --- /dev/null +++ b/richardN/django/session_words/apps/session_app/static/session_app/css/style.css @@ -0,0 +1,12 @@ +.red { + color: red; + } + .blue { + color: blue; + } + .green { + color: green; + } + .bigfont { + font-size: 40px; + } \ No newline at end of file diff --git a/richardN/django/session_words/apps/session_app/templates/session_app/index.html b/richardN/django/session_words/apps/session_app/templates/session_app/index.html new file mode 100644 index 0000000..769c488 --- /dev/null +++ b/richardN/django/session_words/apps/session_app/templates/session_app/index.html @@ -0,0 +1,48 @@ + + + + + Index + {% load static %} + + + +
+ {% csrf_token %} +

Add a word

+ +

Choose color:

+ Red + + | Green + + | Blue + +
+
+ + Show in BIG fonts! +
+ +
+
+ +
+ {% csrf_token %} + + +
+ + + + + + {% for word in request.session.words %} + + + + + {% endfor %} +
WordTime Added
{{word.word}}{{word.time}}
+ + \ No newline at end of file diff --git a/richardN/django/session_words/apps/session_app/tests.py b/richardN/django/session_words/apps/session_app/tests.py new file mode 100644 index 0000000..5982e6b --- /dev/null +++ b/richardN/django/session_words/apps/session_app/tests.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.test import TestCase + +# Create your tests here. diff --git a/richardN/django/session_words/apps/session_app/urls.py b/richardN/django/session_words/apps/session_app/urls.py new file mode 100644 index 0000000..bb5f643 --- /dev/null +++ b/richardN/django/session_words/apps/session_app/urls.py @@ -0,0 +1,7 @@ +from django.conf.urls import url +from . import views # This line is new! +urlpatterns = [ + url(r'^$', views.index), + url(r'^add$', views.add), + url(r'^clear', views.clear), +] \ No newline at end of file diff --git a/richardN/django/session_words/apps/session_app/views.py b/richardN/django/session_words/apps/session_app/views.py new file mode 100644 index 0000000..40a1923 --- /dev/null +++ b/richardN/django/session_words/apps/session_app/views.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.shortcuts import render, redirect, HttpResponse +from time import gmtime, strftime +# Create your views here. + +def index(request): + return render(request, 'session_app/index.html') + +def add(request): + if request.method == 'POST': + form_data = request.POST + + word = { + 'time': strftime("%Y-%m-%d %H:%M %p", gmtime()), + 'word': form_data['word'], + 'color': form_data['color'], + 'bigfont': 'bigfont' if 'bigfont' in form_data else 'smallfont' + } + if 'words' not in request.session: + request.session['words'] = [] + request.session['words'] += [word] + + return redirect('/') + +def clear(request): + request.session.clear() + return redirect('/') \ No newline at end of file diff --git a/richardN/django/session_words/db.sqlite3 b/richardN/django/session_words/db.sqlite3 new file mode 100644 index 0000000000000000000000000000000000000000..10d656b76cba7accb7764788cb0aefbc8a23afa2 GIT binary patch literal 37888 zcmeHQYit|Iec#zxl9DaivSej*u@$eW)16qIPTVDz4gcyzifccyt zFbwk;{Z61?^SXup;LHc~Kd}9M*q@J?>5rfX#d_g~m}Ub0C;Slp82&5#Df|ii$HUm3 zk8rMihx76E5NLm~R4Z!R#j;vkuPcRmt)cyXmX{ZUnn6+*0qL^$u0|-`*-gOZ!e|NiKU$I zRx&3f?k{Ik86+#6%q%07YHC&U3y;)B;epzi6obJ)hY!VC+8;`y=gB=f@HXq^r=~!T z|B zT9JZcbXpXrB~b{5Zpoor!Pu)&DHIjOxd9I|dM}}FwjLmcn4(r%T0_}v8aIrfQdPH= zidI{1J#dvHMq-iJTNja>FPL(ohMY%grBqZ~^+r=si$z6iH0lkdiWF4WwWgb}NIV{w zf{6=ASjrR@Q5vYCmKvJb#^5HVsUUSFR}nEe5{kark3_s>ijeL3s;JGDQmL<(YD#Uh z;)+cq779u7=lYP0c~eH%E&~HZu&Hmf+%po9LsIy*4@pRy5<+$fT2(Ef=J7~qBjH#? z4&L!1AuFa3$q=%kHL4|2(#i=6DH0N8S-j)%Fcb3$qp2n^ViXa+)%v3jym}Lkg}TBk z#>25#g7Yvuf~Ht4)rbg$Cu;p0JEkmDq3XEI-9*T-SU3_5q8^Z+=!iJ7uF6p{6pGHU z2nfWX*VUsLWGNbnM*+(3gfqWKGfJ^oG&l%<%y{5qFZ>StA^bA@8hi|KzfUiU07c+Q zApn1!c>%b6UkzM9tCj5q_(~;21i&p-Df06 z+AZ7%=y|!Sr)J5(p8{U^YYhAZ{xkdw)C&9#dY~6YfFkg$5xB~YT?6Jft?|G2IyW&6 z?4L2VzdeK8=qPCv@JAXq!j0Y}PuANFFL9$h30rT}H#gWT96#1ingsJJW)Oa#@i5<94sd&7M`J{|}AZ;|y{Vo7eghhFR+`M4AHH2l#O=!}}q?3j!U zkM&`0rKF*uGa5B$tx{F%jDerV2zJQp<8R&s?T3yMwF;>3u#)SkwD32zHCm0?M)-#1 zBM|a=`T3iGA(j5BT@+PvO_$@1aq^ zF3iIP_!4b_HWqluwO$&^r8qneFUy@AOO6`n5q%W9U1u#>w(B%SX;;DJQ8^2 z3J1o47u#EmkfBd=Km;Cx*Va{D)*}plTg0VN4om?LmSGDWB$7Ep4t`q(^bkV;4!L-V z17m>0ocQqq&w&{L4HoM)?bpK%Mk~CJz_a$07X0^AXW@)|Kpe}!(_o6tHC7}Hwe97?bbyf zKRpfhuUQ=pX>5q1`bUH9`I1YgV~g&o>mmFnYfLez*^HvbnCN)Ic9_tbyn(&z13o^H z0Qw+Ea|FQMW_E}^5)-k(m_pbd3^#5Zp z(XY=L{qimqe69Q zH&x!qYdZ_&ytMtOP)bEowS~&+?Nl>WUD#NaRv+bSi=}L7p`@-9t9eNdrb=6-q7>gj zG?CQ9)pr(y&C=c53qf^7tfb2I5=vt`vlHA--wW=f?$6 zDL{u!j>oe6pp;!Mi0PHNN=~}Jm0d{%S7-5aN=(nMKFF-hRdc(E zPP%{9bv7xdXE&m2i?6?a^!Go2|G=OhdQk)@0_O;UahUEuuGgX8|L3T{X;vr# zr$hk1|6cg34E%TaPw)ru+wiy1!-=l;i=#t7IF1<|#S;fO2g49O-NaAUTR6y~Fdl~yhlMMEWB9Rd|6lyBQ~UpkT0BZb5jbxM z;Q7B{_*Dk}4E{I#FSIiMBlsia3H(F&*YMBb_t5viH{c(^KY+gv-$z9Bq6km~o(TdT z2!MB(+^>-P5WagZllvudAH;WVfZQ*V`vrW5{p8+9?mm2Hz2xp8caDSo0OA`9VShgz z|38!Bq=`@jo=XI%|Ic$-EL16qz%xMr_x~L8F~fWe9<$pp1gob?w*AJikAFA~+D&V* z!*l8F*&ey-;}?;lvZW}tn&@jMZ2p+>s4U0jaG3aG+9+OdS&3nbw$@;n0&HtAY;;|V zM*{7wQM53oKLPe;9BL63%aGI5H!3=?HbxAqk$fa1S!-hmqm%pE;p<~u=}(fHGk?xB zaZX7XT8o9ugjQbgI-)>3_9-7%+}m)E4i;Tae^aR%HapClVyoc;jq|4-H4QDTa~xk7-x|L3YW zX=W$_r$T_f|EGeB5>o`u6$14AKUc*`GeZ$L6$14AKNVb*m?Chl5YX-acNyj`_zC;F zFwFc*@7ddb`5M{$>peiW$Z+mJ?0ohc*3RzJB{~}x_vANQ&zH4Ai|ka@(zaXXW}8NE zL)$>Uu%<_?i%34KT_Y2LcTB)E@EriWlv$T%fOzqyY#;$6{_WpiBPs%v@ z0@=C^A5GKu*>*ezJ{rTmDWrjkox#XA-W}33pC3G4!!Dy^PquMlzgd(QysxN>dvKsV zdELh=Xf|Y#n6RBCbHI7K5Y890n3i`Eezx0S?TkKDj&7)Sl4JetNazy2|FsPPJ`b?n9 zS~D^yN0_Y@Qo1apc|07FgN0zh`arOe^M`*S*r+-yh1`YOa$sY^x|2tJ<&(*Z7CjA( z*yl0{qBg!xVi8r8v|`M*)Jf0cr(M84ivM`^==ncStQDhzC<12>0o?x&gE!Frzwl4s zufQ^#gMRjZ*uP}oXZP4&Vt6!f=oyJI+gxL}$&(}FbbK_;}*iJJk5<3Y!O#hVZIK4-nf=&f&`#+J5{9PZkj_bKdYYq$e<8`4Gj;I6#^@zqn$t-zl#C3gPjI7S{F2=XmH z5CHGJ++970fuvIx6s3Jt^zruspdGh+^BSK+inhH`YG?}C+*g$g5h)T088Z(CNq_eU zxI5C7UmpW^6XH5)OA8ImBQrj%{+_OWH+A=uW1HvhNG#aQ%tLL*@-+|J%gI*rQK_2r nDA(#iS8}_W0tN=Vba#Bw1Fr?Wd^T{{M#tUCDPs3Cnfm)*TdQn% literal 0 HcmV?d00001 diff --git a/richardN/django/session_words/manage.py b/richardN/django/session_words/manage.py new file mode 100644 index 0000000..fe8c8a4 --- /dev/null +++ b/richardN/django/session_words/manage.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +import os +import sys + +if __name__ == "__main__": + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "session_words.settings") + try: + from django.core.management import execute_from_command_line + except ImportError: + # The above import may fail for some other reason. Ensure that the + # issue is really that Django is missing to avoid masking other + # exceptions on Python 2. + try: + import django + except ImportError: + raise ImportError( + "Couldn't import Django. Are you sure it's installed and " + "available on your PYTHONPATH environment variable? Did you " + "forget to activate a virtual environment?" + ) + raise + execute_from_command_line(sys.argv) diff --git a/richardN/django/session_words/session_words/__init__.py b/richardN/django/session_words/session_words/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/richardN/django/session_words/session_words/settings.py b/richardN/django/session_words/session_words/settings.py new file mode 100644 index 0000000..99696e2 --- /dev/null +++ b/richardN/django/session_words/session_words/settings.py @@ -0,0 +1,121 @@ +""" +Django settings for session_words project. + +Generated by 'django-admin startproject' using Django 1.11.7. + +For more information on this file, see +https://docs.djangoproject.com/en/1.11/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/1.11/ref/settings/ +""" + +import os + +# Build paths inside the project like this: os.path.join(BASE_DIR, ...) +BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/1.11/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = 'zr+!t*9)age4)xjw98jp#+vpn@26!xmr&^!w8-o8+3j9d6ksnp' + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +ALLOWED_HOSTS = [] + + +# Application definition + +INSTALLED_APPS = [ + 'apps.session_app', + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', +] + +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 = 'session_words.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 = 'session_words.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/1.11/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), + } +} + + +# Password validation +# https://docs.djangoproject.com/en/1.11/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/1.11/topics/i18n/ + +LANGUAGE_CODE = 'en-us' + +TIME_ZONE = 'UTC' + +USE_I18N = True + +USE_L10N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/1.11/howto/static-files/ + +STATIC_URL = '/static/' diff --git a/richardN/django/session_words/session_words/urls.py b/richardN/django/session_words/session_words/urls.py new file mode 100644 index 0000000..8d8fde5 --- /dev/null +++ b/richardN/django/session_words/session_words/urls.py @@ -0,0 +1,22 @@ +"""session_words URL Configuration + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/1.11/topics/http/urls/ +Examples: +Function views + 1. Add an import: from my_app import views + 2. Add a URL to urlpatterns: url(r'^$', views.home, name='home') +Class-based views + 1. Add an import: from other_app.views import Home + 2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home') +Including another URLconf + 1. Import the include() function: from django.conf.urls import url, include + 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) +""" +from django.conf.urls import url, include +from django.contrib import admin + +urlpatterns = [ + url(r'^', include('apps.session_app.urls')), + url(r'^admin/', admin.site.urls), +] diff --git a/richardN/django/session_words/session_words/wsgi.py b/richardN/django/session_words/session_words/wsgi.py new file mode 100644 index 0000000..bc39ad3 --- /dev/null +++ b/richardN/django/session_words/session_words/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for session_words 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/1.11/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "session_words.settings") + +application = get_wsgi_application() From 95f6cdc841038736d16c8fddb9232fcf1decb259 Mon Sep 17 00:00:00 2001 From: richnamk Date: Tue, 21 Nov 2017 19:43:53 -0600 Subject: [PATCH 18/18] wannaBeSQL --- richardN/django/user_ass/apps/__init__.py | 0 .../django/user_ass/apps/user_app/__init__.py | 0 .../django/user_ass/apps/user_app/admin.py | 6 + .../django/user_ass/apps/user_app/apps.py | 8 ++ .../apps/user_app/migrations/0001_initial.py | 28 ++++ .../apps/user_app/migrations/__init__.py | 0 .../django/user_ass/apps/user_app/models.py | 15 +++ .../user_app/templates/user_app/index.html | 0 .../django/user_ass/apps/user_app/tests.py | 6 + .../django/user_ass/apps/user_app/urls.py | 5 + .../django/user_ass/apps/user_app/views.py | 10 ++ richardN/django/user_ass/db.sqlite3 | Bin 0 -> 39936 bytes richardN/django/user_ass/manage.py | 22 ++++ richardN/django/user_ass/user_ass/__init__.py | 0 richardN/django/user_ass/user_ass/settings.py | 121 ++++++++++++++++++ richardN/django/user_ass/user_ass/urls.py | 22 ++++ richardN/django/user_ass/user_ass/wsgi.py | 16 +++ 17 files changed, 259 insertions(+) create mode 100644 richardN/django/user_ass/apps/__init__.py create mode 100644 richardN/django/user_ass/apps/user_app/__init__.py create mode 100644 richardN/django/user_ass/apps/user_app/admin.py create mode 100644 richardN/django/user_ass/apps/user_app/apps.py create mode 100644 richardN/django/user_ass/apps/user_app/migrations/0001_initial.py create mode 100644 richardN/django/user_ass/apps/user_app/migrations/__init__.py create mode 100644 richardN/django/user_ass/apps/user_app/models.py create mode 100644 richardN/django/user_ass/apps/user_app/templates/user_app/index.html create mode 100644 richardN/django/user_ass/apps/user_app/tests.py create mode 100644 richardN/django/user_ass/apps/user_app/urls.py create mode 100644 richardN/django/user_ass/apps/user_app/views.py create mode 100644 richardN/django/user_ass/db.sqlite3 create mode 100644 richardN/django/user_ass/manage.py create mode 100644 richardN/django/user_ass/user_ass/__init__.py create mode 100644 richardN/django/user_ass/user_ass/settings.py create mode 100644 richardN/django/user_ass/user_ass/urls.py create mode 100644 richardN/django/user_ass/user_ass/wsgi.py diff --git a/richardN/django/user_ass/apps/__init__.py b/richardN/django/user_ass/apps/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/richardN/django/user_ass/apps/user_app/__init__.py b/richardN/django/user_ass/apps/user_app/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/richardN/django/user_ass/apps/user_app/admin.py b/richardN/django/user_ass/apps/user_app/admin.py new file mode 100644 index 0000000..13be29d --- /dev/null +++ b/richardN/django/user_ass/apps/user_app/admin.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.contrib import admin + +# Register your models here. diff --git a/richardN/django/user_ass/apps/user_app/apps.py b/richardN/django/user_ass/apps/user_app/apps.py new file mode 100644 index 0000000..b6867f5 --- /dev/null +++ b/richardN/django/user_ass/apps/user_app/apps.py @@ -0,0 +1,8 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.apps import AppConfig + + +class UserAppConfig(AppConfig): + name = 'user_app' diff --git a/richardN/django/user_ass/apps/user_app/migrations/0001_initial.py b/richardN/django/user_ass/apps/user_app/migrations/0001_initial.py new file mode 100644 index 0000000..0966bce --- /dev/null +++ b/richardN/django/user_ass/apps/user_app/migrations/0001_initial.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.7 on 2017-11-21 22:28 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='User', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('first_name', models.CharField(max_length=255)), + ('last_name', models.CharField(max_length=255)), + ('email', models.CharField(max_length=255)), + ('age', models.IntegerField()), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('updated_at', models.DateTimeField(auto_now=True)), + ], + ), + ] diff --git a/richardN/django/user_ass/apps/user_app/migrations/__init__.py b/richardN/django/user_ass/apps/user_app/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/richardN/django/user_ass/apps/user_app/models.py b/richardN/django/user_ass/apps/user_app/models.py new file mode 100644 index 0000000..cfe0bd4 --- /dev/null +++ b/richardN/django/user_ass/apps/user_app/models.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models + +# Create your models here. +class User(models.Model): + first_name = models.CharField(max_length=255) + last_name = models.CharField(max_length=255) + email = models.CharField(max_length=255) + age =models.IntegerField() + created_at = models.DateTimeField(auto_now_add = True) + updated_at = models.DateTimeField(auto_now = True) + def __str__(self): + return self.email \ No newline at end of file diff --git a/richardN/django/user_ass/apps/user_app/templates/user_app/index.html b/richardN/django/user_ass/apps/user_app/templates/user_app/index.html new file mode 100644 index 0000000..e69de29 diff --git a/richardN/django/user_ass/apps/user_app/tests.py b/richardN/django/user_ass/apps/user_app/tests.py new file mode 100644 index 0000000..5982e6b --- /dev/null +++ b/richardN/django/user_ass/apps/user_app/tests.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.test import TestCase + +# Create your tests here. diff --git a/richardN/django/user_ass/apps/user_app/urls.py b/richardN/django/user_ass/apps/user_app/urls.py new file mode 100644 index 0000000..0ff096d --- /dev/null +++ b/richardN/django/user_ass/apps/user_app/urls.py @@ -0,0 +1,5 @@ +from django.conf.urls import url +from . import views # This line is new! +urlpatterns = [ + url(r'^$', views.index) # This line has changed! + ] \ No newline at end of file diff --git a/richardN/django/user_ass/apps/user_app/views.py b/richardN/django/user_ass/apps/user_app/views.py new file mode 100644 index 0000000..7a31ee6 --- /dev/null +++ b/richardN/django/user_ass/apps/user_app/views.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.shortcuts import render + +# Create your views here. +from django.shortcuts import HttpResponse +# the index function is called when root is visited +def index(request): + return HttpResponse("Shell Queries") \ No newline at end of file diff --git a/richardN/django/user_ass/db.sqlite3 b/richardN/django/user_ass/db.sqlite3 new file mode 100644 index 0000000000000000000000000000000000000000..17ee6853ae352e211806b5b3e0bf0bd3f27d339c GIT binary patch literal 39936 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 v2QbnBw