From 12ff9e7843d71fbb42a9b336a0f8fa13f7beaed5 Mon Sep 17 00:00:00 2001 From: Matt Huntington Date: Wed, 17 Feb 2021 22:02:50 -0500 Subject: [PATCH] all the ham --- contacts_api/__init__.py | 0 .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 163 bytes contacts_api/__pycache__/admin.cpython-39.pyc | Bin 0 -> 277 bytes .../__pycache__/models.cpython-39.pyc | Bin 0 -> 448 bytes .../__pycache__/serializers.cpython-39.pyc | Bin 0 -> 649 bytes contacts_api/__pycache__/urls.cpython-39.pyc | Bin 0 -> 405 bytes contacts_api/__pycache__/views.cpython-39.pyc | Bin 0 -> 729 bytes contacts_api/admin.py | 5 + contacts_api/apps.py | 5 + contacts_api/migrations/0001_initial.py | 22 +++ contacts_api/migrations/__init__.py | 0 .../__pycache__/0001_initial.cpython-39.pyc | Bin 0 -> 697 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 174 bytes contacts_api/models.py | 7 + contacts_api/serializers.py | 8 ++ contacts_api/tests.py | 3 + contacts_api/urls.py | 8 ++ contacts_api/views.py | 12 ++ django_rest_api/.settings.py.swp | Bin 0 -> 12288 bytes django_rest_api/__init__.py | 0 .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 166 bytes .../__pycache__/settings.cpython-39.pyc | Bin 0 -> 2423 bytes .../__pycache__/urls.cpython-39.pyc | Bin 0 -> 1034 bytes .../__pycache__/wsgi.cpython-39.pyc | Bin 0 -> 585 bytes django_rest_api/asgi.py | 16 +++ django_rest_api/settings.py | 129 ++++++++++++++++++ django_rest_api/urls.py | 23 ++++ django_rest_api/wsgi.py | 16 +++ manage.py | 22 +++ 29 files changed, 276 insertions(+) create mode 100644 contacts_api/__init__.py create mode 100644 contacts_api/__pycache__/__init__.cpython-39.pyc create mode 100644 contacts_api/__pycache__/admin.cpython-39.pyc create mode 100644 contacts_api/__pycache__/models.cpython-39.pyc create mode 100644 contacts_api/__pycache__/serializers.cpython-39.pyc create mode 100644 contacts_api/__pycache__/urls.cpython-39.pyc create mode 100644 contacts_api/__pycache__/views.cpython-39.pyc create mode 100644 contacts_api/admin.py create mode 100644 contacts_api/apps.py create mode 100644 contacts_api/migrations/0001_initial.py create mode 100644 contacts_api/migrations/__init__.py create mode 100644 contacts_api/migrations/__pycache__/0001_initial.cpython-39.pyc create mode 100644 contacts_api/migrations/__pycache__/__init__.cpython-39.pyc create mode 100644 contacts_api/models.py create mode 100644 contacts_api/serializers.py create mode 100644 contacts_api/tests.py create mode 100644 contacts_api/urls.py create mode 100644 contacts_api/views.py create mode 100644 django_rest_api/.settings.py.swp create mode 100644 django_rest_api/__init__.py create mode 100644 django_rest_api/__pycache__/__init__.cpython-39.pyc create mode 100644 django_rest_api/__pycache__/settings.cpython-39.pyc create mode 100644 django_rest_api/__pycache__/urls.cpython-39.pyc create mode 100644 django_rest_api/__pycache__/wsgi.cpython-39.pyc create mode 100644 django_rest_api/asgi.py create mode 100644 django_rest_api/settings.py create mode 100644 django_rest_api/urls.py create mode 100644 django_rest_api/wsgi.py create mode 100755 manage.py diff --git a/contacts_api/__init__.py b/contacts_api/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/contacts_api/__pycache__/__init__.cpython-39.pyc b/contacts_api/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..751078f7c06a111d4f9d1a4262a242d1a923157b GIT binary patch literal 163 zcmYe~<>g`kg1*bT2_X70h(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o6v5KeRZts8~NY zv7{uUG_NExFTEr`Pv0fKJTE6dF{M~PB`Yy6JwLuEwYVfcu^>}FIX|x?F}b7|%!!ZB d%*!l^kJl@xyv1RYo1apelWGUD;WH33004+~DVqQQ literal 0 HcmV?d00001 diff --git a/contacts_api/__pycache__/admin.cpython-39.pyc b/contacts_api/__pycache__/admin.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2268dddbc07019de66fc0ec1f8d8895753bc5dab GIT binary patch literal 277 zcmYk0Jx&8b428!#yJ3YA&cPOBE`Sgc(9$59ZNeloS|*yGXzU2M4U}Amf?`{$T!9MD zrr}Ap^*vdB){DidV10dGJiYS#DezyC;hGE2xfx-=ivT@$W4 z*AJp=4!kWo7#nSZiw8K;$xVu+H+0|4`ZKfDaY)MzTiLC1#Vg}1Bx611x`E;rT99%`^5L#gF}fC%uvk<8X!OwscB9rxg-z)dnLdmT}Ll0 zXAs|zNpFvJWI|oPZa^wicz7rb!3@KsmQkS+`P7;@Ju0<_5cO%YmEXiB@t5}6IdgelyI3wzi8$GY_Y9l<-oUYDE&e&^JW^Q2Pt E3p^2SwEzGB literal 0 HcmV?d00001 diff --git a/contacts_api/__pycache__/serializers.cpython-39.pyc b/contacts_api/__pycache__/serializers.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..904a2e4ee39cc528f030554d1fc9e0508de113ec GIT binary patch literal 649 zcmZuuOG?B*5ba-PMjd}3F1$e&PA(uKC@6?-1~=KX%~U%^JIUCcL3FEY@8OAr-n#M% zuB=K#2ehDz`gFZlAG5l;%urt5b}#QZWAEfFibCfAUl^eR2Hdfd=bSSTAe|^>E;&19 zpdfi>kXU}Bo@AatZ_LvE2iCBZ$CY4xVO;TOefU5YiuDicsxgyhLVp%TqH};R?4YtN z=fHA-3>*Y9h$oRtkch70<~PLn2mKEik+oo33t(2}3OF_?5Jo<3|A85u*~X+YiUOjl zOlhMuQ+uBF;y`QiwT{bLmo>~C*+Z@G=EijyPb-TFCasITtHL@6ugtGuv{j#{*#+(+ zWTk1E>v`1_)wHRr?5Mu4Tx}p^aAT@zt-TG6HnSp|bejsTv#`q1>>(;@H9_n^v;(fV z-$3I$Rep&W>AHS}6or4g=&W^$Q8g6@foi~8pJrWa8@Tc~?|toWJ*8u>ohx)h?wmZ# gtan9qYvGLM{k=qs@*iCs>~(wFr`xn$5BX4h0RYvRmH+?% literal 0 HcmV?d00001 diff --git a/contacts_api/__pycache__/urls.cpython-39.pyc b/contacts_api/__pycache__/urls.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a4c4bb1f0b5c836a0935ea45d530c3fff39c27d0 GIT binary patch literal 405 zcmYjN%}T^D5Kj8!L-gSGF3Td=qj(W7xzw-;-L7d`lGMe02j4-DK9SI?AnYr6 z5GUOgI*>`eFEiga3{BG+g82Ttd{h{rFAJs-0Jw&u3rGwxEKq|9#)vu06;9(47bA|D z$K9>>=D#E6v*6VQCIluJnaDDgLqc|TkFwbTlu(8TucKyj08IKA~NmuUl#8 z+GvuTUZtqDu^o~&e19>m$(OY>SKZT!oc|XyZfGs;vS^6emddJK^h#*ufYE@I2N#KN zjuy9|JA_o1)}5p$wipG57}{V&!8HpaG*>!r;B(VUQ_ISs lKiZaxYg0~#9f2KY(Y*}OvT0c__{wfTN01VnxN|)J{R3Hab>aX3 literal 0 HcmV?d00001 diff --git a/contacts_api/__pycache__/views.cpython-39.pyc b/contacts_api/__pycache__/views.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9191b29b3caa283a473f3bc6cf9096d05d121acd GIT binary patch literal 729 zcmbtS&2AGh5VrT%**2x+h-+W#<92Nxa_uY$+x0I0kknCE5$uYV;!=Q+wnlzMC zN>rp`9W^nJ`*Wg`Cgmw5Z;47(_JgPl=q&pl^Bj>}F+><543U8vT#!-mfE~$*dNzd? zOkLRrBoKh3ldg5LauvX@YSwGm>i?qXBdERstAuDo+UriUxa6nbEYWH zi~QcE#aV6LEv>yF<^T(Q_;XrbV%?UFbneTdb#*&+U0aU3Wve@>Y^i3lop!>2bwbYT zvRdzM`{cTYrF}VHnG72SDmIK{w4gomA6g7IT8zQTT2D;=$au@$JPFt#h5`C^azG}d z!XNaUKO2;A*_p2_EwY?61j%673DL&ED@Y3h>UY3iH*1ELH>&CdyuN%P1&D+vVO9&j1yXO>; z6&zS0fEQ88iWqyVe%k^Et08duV(3BtGF}K6&{_gRNG>^{6bE0^Z)_pT2u7EpEE_j4GkO&{%;x&$BR;-8m^kDkbT#sgUwa z%6A)8wRaI3Xrn!K3mM=V4WOB8be7(Ph0&~|ch)Lsqjn{EN~}-X1|gX(mEEP;sqt9i z9;MA1_v(LV_AVXk!mrnpS2UQL)XMwi#&}KC8#6g>KA5Ue;3lwArfj4|=cQWf$$Y1p z>%jGsPNvi8Be|!2xZc|KU+I&(0}4YCi#U$C5C{AgPk)O)@!xL8Ifg`kg1*bT2_X70h(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o10aKeRZts8~NY zv7{uUG_NExFTEr`Pv0fKJTE6dF{M~PB`Yy6JwLuEwYVfcu^>}FIX|x?F}b7|%*oA6 oFG?)Q%+D*', views.ContactDetail.as_view(), name='contact_detail'), # api/contacts will be routed to the ContactDetail view for handling +] + diff --git a/contacts_api/views.py b/contacts_api/views.py new file mode 100644 index 0000000..c776b71 --- /dev/null +++ b/contacts_api/views.py @@ -0,0 +1,12 @@ +from rest_framework import generics +from .serializers import ContactSerializer +from .models import Contact + +class ContactList(generics.ListCreateAPIView): + queryset = Contact.objects.all() # tell django how to retrieve all objects from the DB + serializer_class = ContactSerializer # tell django what serializer to use + +class ContactDetail(generics.RetrieveUpdateDestroyAPIView): + queryset = Contact.objects.all() + serializer_class = ContactSerializer + diff --git a/django_rest_api/.settings.py.swp b/django_rest_api/.settings.py.swp new file mode 100644 index 0000000000000000000000000000000000000000..4188d2a891d316d19990d84c215cb81255069b13 GIT binary patch literal 12288 zcmeI2ON<;x8OO_Uc*TUL;7Zv(^lr4%6g2z zcfGL!3O6{Qga~}&1d;)P#DU}vi3A*y3liZ32)H02Ku91YBKTK7W@lf-2_OOLk$%(D zRb8)tecxBryEQtu)o9U+`Z1Kn~>MQPr*yz2jKhQ8{i)JGS~q&Xn_j&F!<9cLVg0i2c8GdfoH)p z;O`F+@?-Eta2>3G-@S{F?*ajCfe>th%YcH9fcJw_;N^GXS#TG84%`4|z^~sy$k)LQ z&;d1Y349E!g9pJ$@BsMB+X;CQya4WjyTAbkD1i@wzrGFQ0DlC30KW%6178522QC44BdZj!Kc4Uy1D~-9!L>XoKNj)^Vr%Tm-e}#V1+P3<3#6!748=f^`Vi~Fo z`*m~hB-$QCF-vcom2>TV3609dy@WxdRX3mPwCk$B!$B2YZ5r*(p|M#vtDRbs%=}U; z-ozMW5OQ0TdF7(7I^Xami+l(X_?F9`N`9cL*9pbv>6PT7erj!_RoB+3mWl&ad>QeP zZpCt{hn5gKLFAa*sKZI>(A%-cB5rrHtgSRBh_tlMJ4wy|N(0rv^8)`rSAUE9+>5;? z!#SquzrXuK!6HK{4P(jr+~cklak+cAA!9gr%dVSc$wfi^S zh>gqnd8qPPHEX4O)=Jr|1(AS3opmVE?^?Y5UE}RAyz_QY;p$w>KN@McZ>m`pB|p%y)3K3r$aO0_>KX7110v zwqjSJp*sXh85>5wuEe_YR>gurTO&&_rA{sT4N0!{HyftW?KT@#gq4o++RQoTC(`sC zG2yxuhAy`guYjK(@~j0PP%2&D^Eq{^J_miyV?wByk~kr|Elq?f8)=w8J?+*YG@8xMRrPIldJR~*vQ^b-dX`#_L*;JHhN& zg=4*+{Wx66hPzFfOevUu-01d8%qaEeGm&?_SzmcWq_S zN#HsIxKX{PqVjxsH1?t|#nOO9U3mxMcj9+=SgmBq)7P=Lt#1rBGyg-h@7JrtUSseC zh0yIrdvl#Sfv?GA(ssCmD1!B+xCT-uN~Qm8Dn8$NwCt0 zNjhV@6c*y_Z=R;P=miGC*qhqoIxKX9T@M~zwx`UVxm-xKTYNl5v?;-?B8jnYGdBp; zLue{JX-!Ks_C?IGV7e@^>peLjxmt=m?6nIH-myam-!T?=YjpHTl z%o%cj`~H2KCvq9?s{D8y!)KK;G#KwGVEHO$Gaji86c)o3WMQ*^e+^}u^IXny(v}xQ z3`2)q;3PckN*P)bQj~aE^_$FR5f){Kj&}1^tYj$%qseS#a%r#=EEF_d#wgxt^fhRd W-R8|E6PGS{^R0}s>*RGPk?kMkv9^`~ literal 0 HcmV?d00001 diff --git a/django_rest_api/__init__.py b/django_rest_api/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/django_rest_api/__pycache__/__init__.cpython-39.pyc b/django_rest_api/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..005c481ac9b62702478e29ec6979e6901de6eb9e GIT binary patch literal 166 zcmYe~<>g`kf~L#52_X70h(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o6vTKeRZts8~NY zv7{uUG_NExFTEr`Pv0fKJTE6dF{M~PB`Yy6JwLuEwYVfcu^2KczG$)edCIXCP((01445!vFvP literal 0 HcmV?d00001 diff --git a/django_rest_api/__pycache__/settings.cpython-39.pyc b/django_rest_api/__pycache__/settings.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ad772fd0b6092d677e1344226eb978884f6dbdf2 GIT binary patch literal 2423 zcmb7GTXWk)6qX!0b{soRo8D+)MhwHWE?92b5*P+bRa;F>9ou8c4d|gl)~@Z1b#b+; zq|qyXqYuzGX81vjUU}jV@Bqw|v$CCdoX!v=Yo$GV&Uen9+uAOb3Ibd&eyjZOZAlP* z=aa=N2a`we&|hIdf+-*oWn9tAm>E&P8NBkN_>=UraF9L7nyYBV%pu9l4+V2=D4^^c z(Ja7w72fMWFQS}TLa>S?#McXNL?WW~*V0flH&D^MfJ$fsT|k>~UqqK)XNhQTqAhe8 zxVF%hbiA65*N8Zj%!}x{c?rE|ZUOdXc&@;672Pnep_{r;e&2o|3PPcNVEe;BrkF9} z52-u|LK&qrE5wvp_JqijFgU;tQwoJ$?Bmd87|H!(`PP)LVk3|EGG%tiW}LU=hyt2C z1HZ3qD?1?l1hBmz#4_wNMrl zsbjNId~XNc88deG>z&GnWwPBzuf`8@X?|3+1NMA zYv#HWgmi>$ghOf;oxo?d!zg#Rxsf`45ZWF-3c_)GdFlg&GlitDr2dY#mZ=dKb90Hv zMX=A<@dVTO+R`G$ltKi~E_kqD4?*I_vIK*eIXqIdoR2?V*n;8_gj{@Nhghk>&h}2G zab*Uwz(KJSg@hd|`s`zY{lT)%nU#wg^eJsYs(e-nLHu?d$r;{)3nLpdqmJ>fagp76R^ z^zbY}P6}3uLYKzX85+ah#D$tw`T&D{G_NV8o|d^WTc+lvG+SOV3#!cl;~

DZaf7 zbCyd%xE~GUJLljG@k^*Z7JoA1J;`bA*>@mwkH`0ym`}X<4uSbvSxRz`)!H+yRX3%2 zqpK%*wbQZEuUxxhG}US^UAw2Gl?G<0PPL2*vu+ zh2A{vncN~?$cd1wxq)N5Bj71#lU1#?+h}Qt)Kd3g?CDxJ$#+y;-*0#8iS)Fs8zDbw z;-^b{O;c`SQwpsBSyd-Z~yg6|?ge7nfak4srmgF-t|5(*E9{!}DYqhRsSkJWYlWbjk+}lk` zYO~qi*XkCJgPv?OTDk!wAVALONnx*1uQ#=QwX2y|YwfOXrTl!f+T8{OR!@rEcH6Le z-Da)bdXlUe+Fqxr8k(ML?(4e^j?-+^RGxOpT3t0%ZjPQ@S9``&Yn}(zbG6xkMbMCx znrdser|xQ2tzFjuu(79EW*br{56NRSw!dgizna^3TgfV?87Az_039`M$1g(o5%?q> z{(4sB=|Zb;=CV-)9ScGo_|w3y_GhlTsr48G4ppyc?(RZ&!5s3NKNn6e*w|4 BLr4Gs literal 0 HcmV?d00001 diff --git a/django_rest_api/__pycache__/urls.cpython-39.pyc b/django_rest_api/__pycache__/urls.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4feb8df633bd8b2870036af6e67ff6fb5282f439 GIT binary patch literal 1034 zcma)5%Z}496iw3fG3g8s@dMtqkvg#kb`>Ddz%U~r7Qk#Gq|}YwHdSm#w!=KO{TluV zWy^|RV1c-HQ>Z{l<0`J593P)^d`*syA`jZ5ug9}b9nbq_C;Kgg$qRV&Ids%ZJ?hh- z^m&j5z8!bU4iD4Njl;6bduh-2SV+69M|&H86TrC7f^~mA*aXWUJ)naRUVK2V1E5$t&FMk6k{rLoop3UO0HRMl3a4k1b&j7U?Zy{ z*VuwFY_D#grA2xS)1&&VkFR zzoQz9Pl(Pe$vFN?(S^v%nigUSA-MglwHyv}m(PU@27wef9*bq;7%kc;r`x!;$C22; zcOqNt#D#KawewOgF$B2VX=GnG-ccM!-=UPf*l)Uo@D-1DK}QhDivKd^-(Q}$jpp)L$-LhH8~ z?$y8-PYvO_>wdh!mzpV!p`OjE76vjlQs7teN|cgNjknytuhBnqOP^FX&EP4Qv@Y3m SAGq})bm9F&AATKpe*OYU!9vdf literal 0 HcmV?d00001 diff --git a/django_rest_api/__pycache__/wsgi.cpython-39.pyc b/django_rest_api/__pycache__/wsgi.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9172031b3fda0ddfe895749b38fbaba49448d15a GIT binary patch literal 585 zcmZWn!EO^V5cO`-CM*9 z6`N=l(b+L^)tPl72GO$nZBKR8-uIYL=L?(dt9Z%=`&U1b57W_@7ij0Y+C)gW+rG^wwo%1&Zgn ztZSnS88q5Fr+jaTtwIM}TOzKu4vvD|Y39#Zt z`dln<6Hq9q4PI7YgV^{|i{uxzg-r%g^SFeNwRcq1KN-!F;k!4J(OEVCn0I;aKX8-^I literal 0 HcmV?d00001 diff --git a/django_rest_api/asgi.py b/django_rest_api/asgi.py new file mode 100644 index 0000000..5575bfe --- /dev/null +++ b/django_rest_api/asgi.py @@ -0,0 +1,16 @@ +""" +ASGI config for django_rest_api project. + +It exposes the ASGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/3.1/howto/deployment/asgi/ +""" + +import os + +from django.core.asgi import get_asgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'django_rest_api.settings') + +application = get_asgi_application() diff --git a/django_rest_api/settings.py b/django_rest_api/settings.py new file mode 100644 index 0000000..e632e4c --- /dev/null +++ b/django_rest_api/settings.py @@ -0,0 +1,129 @@ +""" +Django settings for django_rest_api project. + +Generated by 'django-admin startproject' using Django 3.1.6. + +For more information on this file, see +https://docs.djangoproject.com/en/3.1/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/3.1/ref/settings/ +""" + +from pathlib import Path + +# Build paths inside the project like this: BASE_DIR / 'subdir'. +BASE_DIR = Path(__file__).resolve().parent.parent + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/3.1/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = '6d*ktt0=6-!)i1bdxk4(^)*ls-eseg(k12m2vefor1-g@vc5kn' + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +ALLOWED_HOSTS = [] + + +# Application definition + +INSTALLED_APPS = [ + 'corsheaders', # add this + 'contacts_api', + 'rest_framework', + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', +] + +MIDDLEWARE = [ + 'corsheaders.middleware.CorsMiddleware', # this makes the cors package run for all requests. A bit like app.use() in express + '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', +] + +CORS_ALLOW_ALL_ORIGINS = True # add this + +ROOT_URLCONF = 'django_rest_api.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 = 'django_rest_api.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/3.1/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.postgresql', + 'NAME': 'django_contacts', + 'USER': '', + 'PASSWORD': '', + 'HOST': 'localhost' + } +} + + +# Password validation +# https://docs.djangoproject.com/en/3.1/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/3.1/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/3.1/howto/static-files/ + +STATIC_URL = '/static/' diff --git a/django_rest_api/urls.py b/django_rest_api/urls.py new file mode 100644 index 0000000..c5d3dd4 --- /dev/null +++ b/django_rest_api/urls.py @@ -0,0 +1,23 @@ +"""django_rest_api URL Configuration + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/3.1/topics/http/urls/ +Examples: +Function views + 1. Add an import: from my_app import views + 2. Add a URL to urlpatterns: path('', views.home, name='home') +Class-based views + 1. Add an import: from other_app.views import Home + 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') +Including another URLconf + 1. Import the include() function: from django.urls import include, path + 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) +""" +from django.contrib import admin +from django.urls import path +from django.conf.urls import include # add this + +urlpatterns = [ + path('', include('contacts_api.urls')), # add this + path('admin/', admin.site.urls), +] diff --git a/django_rest_api/wsgi.py b/django_rest_api/wsgi.py new file mode 100644 index 0000000..6dbc105 --- /dev/null +++ b/django_rest_api/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for django_rest_api 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/3.1/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'django_rest_api.settings') + +application = get_wsgi_application() diff --git a/manage.py b/manage.py new file mode 100755 index 0000000..087e21d --- /dev/null +++ b/manage.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +"""Django's command-line utility for administrative tasks.""" +import os +import sys + + +def main(): + """Run administrative tasks.""" + os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'django_rest_api.settings') + try: + from django.core.management import execute_from_command_line + except ImportError as exc: + 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?" + ) from exc + execute_from_command_line(sys.argv) + + +if __name__ == '__main__': + main()