From e0393611cf6b9fe28bc5f1b877ac4eb721306da3 Mon Sep 17 00:00:00 2001 From: XxMistaCruzxX Date: Thu, 16 Nov 2023 15:13:22 -0500 Subject: [PATCH] Set up Djano REST Framework. Created two routes with GET and POST routes showing the intaking of body inputs. --- .../__pycache__/__init__.cpython-311.pyc | Bin 199 -> 188 bytes .../__pycache__/settings.cpython-311.pyc | Bin 2648 -> 2653 bytes .../__pycache__/urls.cpython-311.pyc | Bin 1089 -> 1469 bytes .../__pycache__/views.cpython-311.pyc | Bin 0 -> 3772 bytes .../__pycache__/wsgi.cpython-311.pyc | Bin 735 -> 724 bytes alttextbackend/settings.py | 73 +++++++++--------- alttextbackend/urls.py | 8 +- alttextbackend/views.py | 55 +++++++++++++ db.sqlite3 | Bin 0 -> 131072 bytes installdependencies.sh | 3 +- 10 files changed, 100 insertions(+), 39 deletions(-) create mode 100644 alttextbackend/__pycache__/views.cpython-311.pyc create mode 100644 alttextbackend/views.py diff --git a/alttextbackend/__pycache__/__init__.cpython-311.pyc b/alttextbackend/__pycache__/__init__.cpython-311.pyc index f75ec102d5049bb075990f980603ba6c3948a0f1..1117ad899cf298c9b77917260e8bc83b50554fff 100644 GIT binary patch delta 34 ocmX@kxQCH@IWI340}#CUuQ!p~l+k~pqXM&|Psqds#fcNl0iys3(f|Me delta 30 kcmdnPc$|@YIWI340}%WZSDMIe${01#QDI`L!o)H+0CZ;v6aWAK diff --git a/alttextbackend/__pycache__/settings.cpython-311.pyc b/alttextbackend/__pycache__/settings.cpython-311.pyc index aa8df2a07c92127da664baf5d0b9254e738ed9db..580a5732c49b7abb8bfefc2597636bfa29347038 100644 GIT binary patch delta 108 zcmca1a#w_RIWI340}vGEgr(YVrwd_}3nCGlxRiMgre`9;~A&6xi) zG4gCSV@qXX^q)M3LxI`RCuH(&4#ml@Im8&%Co^%T333QAePDnQ4SXL&CRcLaW>Ezi F4*=zo9-jaJ delta 87 zcmcaBazli7IWI340}%WZS4!2`$UBLNk!|t;=lk0l=1n^M0NT4T-GR7MurrY6xJNJT=ppT zT#hIXMg}H^RF)LBRHiIWn650afgs*8CI*JpKnww3mFz&0HHBjtBTxp2ApnayPM|vW zEN-|828LjU)i545gSmhjI8Zd;RG-cg#goDv%%I7$v1TSyJ<~0gg2a-HTkM&6$vLGd zsV_n9(qy{D>6D+JT^yE~T7HYmGdD3k70j+;OH9el%+s&pOf1OMO)M?R(616MN-Zvl zPb*5yO)bwa%GN6_$|(lR>nDMXsNw=D)z1VQ;it)ai#WL98y^a+_fgIRI%31%TK5uh;0BgKa&KVjCWSG~Z11>IoKxPT3PU}IqAY;ft2 zm|!}^YKr|u7Ue4}$~RazfI`v}(kG-}kTbq0W^zT$K)Gvx@ zUJ=v0$f9+HMGGP&qjEu9b3)Y>am|b3+E>K2FS6)dVbS@($;!{vzzu>$LO`bi09pd2 Avj6}9 delta 255 zcmdnXeUL+aIWI340}%WZS4x#&W?*;>;=lk4l<_%WqPn~oBLfpdDoYAWDpM9KOhp#k z!~!v{bjB$56xLt{O}5Pvj5C>p7;mu@B$i}Uu_dPDX6EVpX>v?fWHE5O#ZsJEl6s4! zv?!g;`ZuYiRy~kkE`0)?19QtqL2(HlZ?wn6n;vu6<470(r%E9TjpRb zE-Q4QP?#RA8BQlXmM@!~m1dM|*79ewGX;4*kM-tk_QAZAuSh65&}tgGFVV|6B`;gP zyI@9^G-;J=;w0~{51kpm4GUJsWod%Wk6%>OX{|6fK2(sEyOOGmpT9mfF6FgeP5Dae zy(>*jE3-0oVB2m!1n;PQb6-=;5C%<9QQHBQYFA0@T>i!sI}Neh6uXy(@uIuz0S-sm zf!>@0@y9yK=|-7bbFFaTN_Z+I7xNK zNt+RZ2*v*UV`0)oDFCXha9i=-|>9rO4spSu=9@RhJ$~8IhD3NiAK+ zt1=1NcX-(L%H}?h)IBV7Pe_KBU4TN>7fqOWD(3%$oxd=IV7`j*Y<>m+Upyzfa@=D< zvkgPp5k=W17HP)$Hs1E zPaZ#>y>V^TZ3(K9pR~Lf97WYEL8A9m%QO9m{R$We6-{(tq3COizo%#m!P;B(K@;7h z9s*b*rEpwtN$TQ}W#Nq&e|?+*HjW zYn(G59}A1Z^O_UDMy)t0fDSAQQ}!1@9=kRCwyH&TExMoEVz#5xseYC0%;e zy`6ZNmyW^uwi60|))XNEk2(ObRJ+P9mwT{GYT#>fk8)+QGgkNmElt2vD|S|Ym_PiC zOaBJ~@i6LD7s53LneAX*Eca*|tet)Wu#FEW`fwpsUnLR(_SFbsufDHG7kfXR5Cj;_ z2;ryyh7i7U5&|OuoU@@clE7mR5XR2Bf|D@l-jCH>^vJ?FnEP+_-5+gvn_LblASu{<#y0Lw>_{RYv#^A!Z&>sw z_Th<-_5vimJJA#ELphGNc&ex>zEy>sD(pn@8(*j#OX}=|Q>woLAUk!wNUZhfu>m7C zV8#Y^V5jCS>{N=hJo|K`wRgR>_r6yl&|Cn=n;9~J0y zA3Nhx+=s3BHW4)0p8^(iE98{2O^jkdD~EA^{a9Jq4Ot2?zGiRYJQ=?CovWPeKc#2E z1kx`2#UP~2a~xM9hjr&&B0akEE|CMe^DdEY-Fg4wY=X4x;kX0@vjK`R delta 34 ncmcb@dY_ehIWI340}%WZSK7$U!NeFgS%gVpvIP)(GIaw0kV6Ou diff --git a/alttextbackend/settings.py b/alttextbackend/settings.py index 840a83c..a35fa9d 100644 --- a/alttextbackend/settings.py +++ b/alttextbackend/settings.py @@ -20,7 +20,7 @@ BASE_DIR = Path(__file__).resolve().parent.parent # See https://docs.djangoproject.com/en/4.2/howto/deployment/checklist/ # SECURITY WARNING: keep the secret key used in production secret! -SECRET_KEY = 'django-insecure-zw-!-jq9fw0mzdzngy*6q+v&x03ija%lz2q&4!)$mth06pf$i(' +SECRET_KEY = "django-insecure-zw-!-jq9fw0mzdzngy*6q+v&x03ija%lz2q&4!)$mth06pf$i(" # SECURITY WARNING: don't run with debug turned on in production! DEBUG = True @@ -31,52 +31,53 @@ ALLOWED_HOSTS = [] # Application definition INSTALLED_APPS = [ - 'django.contrib.admin', - 'django.contrib.auth', - 'django.contrib.contenttypes', - 'django.contrib.sessions', - 'django.contrib.messages', - 'django.contrib.staticfiles', + "django.contrib.admin", + "django.contrib.auth", + "django.contrib.contenttypes", + "django.contrib.sessions", + "django.contrib.messages", + "django.contrib.staticfiles", + "rest_framework", ] 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', + "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 = 'alttextbackend.urls' +ROOT_URLCONF = "alttextbackend.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', + "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 = 'alttextbackend.wsgi.application' +WSGI_APPLICATION = "alttextbackend.wsgi.application" # Database # https://docs.djangoproject.com/en/4.2/ref/settings/#databases DATABASES = { - 'default': { - 'ENGINE': 'django.db.backends.sqlite3', - 'NAME': BASE_DIR / 'db.sqlite3', + "default": { + "ENGINE": "django.db.backends.sqlite3", + "NAME": BASE_DIR / "db.sqlite3", } } @@ -86,16 +87,16 @@ DATABASES = { AUTH_PASSWORD_VALIDATORS = [ { - 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', + "NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator", }, { - 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', + "NAME": "django.contrib.auth.password_validation.MinimumLengthValidator", }, { - 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', + "NAME": "django.contrib.auth.password_validation.CommonPasswordValidator", }, { - 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', + "NAME": "django.contrib.auth.password_validation.NumericPasswordValidator", }, ] @@ -103,9 +104,9 @@ AUTH_PASSWORD_VALIDATORS = [ # Internationalization # https://docs.djangoproject.com/en/4.2/topics/i18n/ -LANGUAGE_CODE = 'en-us' +LANGUAGE_CODE = "en-us" -TIME_ZONE = 'UTC' +TIME_ZONE = "UTC" USE_I18N = True @@ -115,9 +116,9 @@ USE_TZ = True # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/4.2/howto/static-files/ -STATIC_URL = 'static/' +STATIC_URL = "static/" # Default primary key field type # https://docs.djangoproject.com/en/4.2/ref/settings/#default-auto-field -DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' +DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField" diff --git a/alttextbackend/urls.py b/alttextbackend/urls.py index c6cda30..8bd2aad 100644 --- a/alttextbackend/urls.py +++ b/alttextbackend/urls.py @@ -15,8 +15,12 @@ Including another URLconf 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) """ from django.contrib import admin -from django.urls import path +from django.urls import path, include +from .views import BooksView, ImagesView urlpatterns = [ - path('admin/', admin.site.urls), + path("admin/", admin.site.urls), + path("api-auth/", include("rest_framework.urls")), + path("api/books", BooksView.as_view()), + path("api/images", ImagesView.as_view()), ] diff --git a/alttextbackend/views.py b/alttextbackend/views.py new file mode 100644 index 0000000..c128d09 --- /dev/null +++ b/alttextbackend/views.py @@ -0,0 +1,55 @@ +from rest_framework.views import APIView +from rest_framework.response import Response +from rest_framework import status +from rest_framework import permissions + +from rest_framework import serializers + + +class BookSerializer(serializers.Serializer): + bookdata = serializers.CharField() + + +class ImageSerializer(serializers.Serializer): + imagedata = serializers.CharField() + beforeContext = serializers.CharField(required=False) + afterContext = serializers.CharField(required=False) + + +class BooksView(APIView): + def get(self, request, *args, **kwargs): + data = {"books": "this is a book"} + return Response(data, status=status.HTTP_200_OK) + + def post(self, request, *args, **kwargs): + serializer = BookSerializer(data=request.data) + if serializer.is_valid(): + validated_data = serializer.validated_data + return Response( + {"book": validated_data.get("bookdata")}, + status=status.HTTP_201_CREATED, + ) + else: + return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) + + +class ImagesView(APIView): + def get(self, request, *args, **kwargs): + data = {"images": "this is an image"} + return Response(data, status=status.HTTP_200_OK) + + def post(self, request, *args, **kwargs): + serializer = ImageSerializer(data=request.data) + if serializer.is_valid(): + validated_data = serializer.validated_data + res = {"book": validated_data.get("imagedata")} + if validated_data.get("beforeContext"): + res["beforeContext"] = validated_data.get("beforeContext") + if validated_data.get("afterContext"): + res["afterContext"] = validated_data.get("afterContext") + return Response( + res, + status=status.HTTP_201_CREATED, + ) + else: + return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) diff --git a/db.sqlite3 b/db.sqlite3 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..9c9caa9fceb2d32fb07f069f76882699c55507ea 100644 GIT binary patch literal 131072 zcmeI5Yit`=cE>p)MT(Nh(Zlk%n>ZTLQDUyFh;NEcw;RP~Y&EtV%W@L|4W>hKB-7zT zCMiF#KwBzKc9CrhbcGoHt}Xa47R@7$R=_l|V!>ZNi^leg-Ps@js1o(Yd2cwUla zkH_;2{m1_8{G6o~UuT2<6)fxhR-f^_aPxy4v9|b=Qd^h-O z{;v&h`+na0t)Y*Ht_WZ7e9+I)p!?gOo(f2BEeh>sxmMEds=KWl%5GC@DBF$t?oLx* zFPHR9g;sK@WI9%i6_wpu`Iggs`rLYcWg{4`+!XD0*Fc1~!kW(4}t9j#Fl}?OtO)mC zY^jBcex35GpD#=iO|x%t9tjyiY^=O|DR1phoQ4c5btH0`Ds)?G$ZJ=gqE^Qh+^XGdSVXvkh?BkMN4(LRt4MQ2BCHt*CM)FN-Ijp7ZpaXOw@j&_?RHIjX-7f zf`@m9&07_ETvMo`$ex~W*qZTx6Ys8$?X8Ujq+Cw8pEc`OZ%gLYrC%65dxI`D-(z&B zW}tg{=#81En?bP$s7KMqv?u%lX>LwvzvTeRne)g3{lFaxmc0!w_qOL~GT@gk%^(aikQNq%w|~lv$E3)EGB^D$k(oyyLU?IQcvPLvM}qw;v~*Lg zZP#r#Z$r|-H>d9X+3cBO7A?{CMPERwCx!NB_{HXODn;GdQ7URdt0+}^5~(QJOrex4 zB@6s9#HGNn0n`3Q;bOSIXZa9Q+Nwe1Z^$)vEi%WK@Fq{}X!z2;pk z9zyNMt;k8RsouR-x-q#Qj=nbJXH9#P$7%GJP3_jMRx4_bO|LCJ$HCL=8azWKqwP&0 zAT2Ekd#aUPwY=R>TkK`b;9~9=viXhl96uB_;$q%+5^4L5$KGE!k5bV}x##Xe{lLt0 zh?Y}huX)5j7r!Ky#JTX_hkqvga_HmGS3-9}sqv4--yi?6@yW5TkG(@i_yGYB009sH z0T2KI5C8!Xun|a34SP<`uQWA%oF*2F#g%fc+$yV;L@be9jK>$_89AOi8&982=3ZD% zCz9F3#mQmM%^!_`w_Ii56I~Zw%T!)Q5y7iS#D^Z90VIdX)09n2{+2wWG<0NygW)S zUhTL@TjMg5p-OGH;@WC-A1?*TN2ji1DXWhzoBB@6J&;5)p3I&bArGCpjwP)gc%Jhh zv^08`OI{3+lTPD}bsDdkAmSO<13YDNvE@wqqJP*ke__SQ|8R_qBJr)(Z+G$PBUG#f zx#7)Z)5*m0>hQ2fB2A@gxkfIMEV)dBTaA0Xo>?NcUQ@Oz>b6q6Q7=mTXWPa{y|elz%jVE&ruD6EW<~OPlY+~f z4FB|ycX7lx!1ER?XE7sqmpazwOogdYa_kpB?-Bn~{44Pv#jlFLN*nkA0T2KI5C8!X z009sH0T2KI5C8!XcvJ+A`A$A1bS4fN|N5Wy&7TsiGa@YO!y(_y3{NAl41q7~o00ey zPak-veKT`>vzsue4Ndx_lR=&m=uC)U^Z!qb|Aa^UXYu#M&xr-`tT-P2m+&8izZ7nS z*TOG^r$YY~`kT=2gx(2lgieirZ~PnMzde4R3g8C>KmY_l00ck)1V8`;KmY_B1R^Jf zJ;MB=|8`lsqZltW=hT|awq;}cIf-ndaX)=OuhB2JuvqDPx^~BPJNg|WwQZZ7zNcd+ z&yd}z1wWh9Z*fMO9gBryWU-hX=Bg}jR9$7pKABBIUz#T4_>04aJcqd<(N=)I0bvCU zosI&AR%?MMeg7dWq=%Vchcy#zHGP^s@DOI7_i^RywXZ9gZOHWT21V{Oq;`%Q8o331 znZYa!Z5<0k6x;j+eR3h3ocA#?ox@B8TYrW=qY&nzUVe7|n%O-)--^(e5meh=r8+wm$E~K z9`gXRHAI;^&(QY=%-T?99$?mnJagxB^o;?v+99UV+{;XvP;<|-^Z`Ne`8XHbdF$>< zr5!T=FySwVP6^g5%*=70 zuqgCoU5=gb330(CzcQ^KFx*-)BU3XzVL@=_OD091Fe{j;kqIuqnhX*3J%&S;(Fliq z!bzc<>I-x%ivYzd7qeV5^cXCy}Xnay-Xkn3|MC`Kfouq5;*BLezB;)sNso00ck)1V8`;KmY_l00ck)1fCEAc>jMwDjH#e00@8p2!H?xfB*=900@8p z2t3gQEc5^Q>JtqE!Giz@fB*=900@8p2!H?xfB*=9z!4>Y@&6-Qu?PzUKmY_l00ck) z1V8`;KmY_l00b-q@cwUsfmILy0T2KI5C8!X009sH0T2KI5ICX)*rfjx;;u*hU-A3m ze~aH1KN9~<{3r24@$2GWh<_@6Rs6E}yW($&zb?Kn{-XE`;?Iho72D!xr~rOI00ck) z1V8`;KmY_l00ck)1V8`;_9rmx6$JkYzLfa#IA6}NQ7; z5L}cLBYosUbYzWdV@iX|L<@f&`g>Vo92!H?xfB*=900@8p2!H?xfB*=9fC~Y<|GPlJE)W0# z5C8!X009sH0T2KI5C8!XIAR3w{(r00@8p2!H?xfB*=900@8p2!MbK zfl%PPo>AWyJ>s+BzYBio|61tI_{|kIQIR{|Asyux*~kR^MU764hQXt>40=) zQE11@wUTyM-EG}acAHv5*>2Q#cbfWoxuj&&ctR^J7n}yi&aLNHHuCc7+WGt&a>RMK zr+h@dves)BkxxhXS<9tJwEgL+fb9N%>8djV8oMzzIs7cw}P_WO2scIH% zRbw$J)@v=T)>2ycb~Gj;v6aeZw3L3$ns%Z~otQ_JeqJoPO>5SE90f?`wNL;TvC$Yz zR!v;Q-Oi7-8}lOGi;V@O#YN%%bW1H%^e)hH6LNOx<3Ya4W>b?!dBrPlMWJ>>x)MBfAn^ZdWvxt?O^>R%kL_Oh0V|!~O0V$Ug?q|*V?YZA@^PasymzwV}I#e^zy|`XmJy!|09jq}Eb+ebG8<)$a z+vDCWFxWYw^xXTm(%hWTe#-&Wgc#@t?ohDoZE(4_Jx7xPzjR@4-)5l`*V_eOAE7vc z>=}OVaeQ)rk{-tP-WU%^D=WhN7tIF6?;?C*w$EnwqSjxAEJs2v4bIiYp&B6fG}zU| zOb5G;{$H-u*M|Jk!h*2L!5aN#Q@gdR)ry*9(`!TMICz>}gJ-B@w7n?=q@^WcPvt&K zH`Us9U8$D08)}QajP>joviXhl96wZzs5?96eJ7E&-+1i(h4UyCt(4vGE*Sr3{ULrp z00ck)1V8`;KmY_l00ck)1VG?u69{=Pc&0u7;}LI$cS3(S{_mq7js9@(H%GoXGUfjk z%>$?o{l0h8`zJ#`Exb2$j?5mTpSN?10Vx_4-d*HbnVNP-F|*`YVRBkPKGcc`9+dE^WgdUSt^+rWUS}yl+pH2z5PjA+ixh(-uBHoHiybV z9(E{?22hRBu?HE(b0bY|_-NribwVbNQMyDr^{9vG=%jAri?$GG3P$81Ou-1-`ybxw z&2fQ;G6iEUAl+LK_C#}5%swY5)=L_z4kZ>>3(0I+H7CTFrTm6ymzh+iQIB?a*8@)` zp-Sm^h(!11g!u8 zx@z~s(e}hi>s(7imRhQoYi#O7cdleHok?j0HRCjR+6c@3)Y8Aa4R+Uzh29w&jJ8id z9gq~7YkAe$Qo6RiS97XR)Rwh^Q`%DpNV8TLo0?WM{PdUTC=rRi{gY4eNkX4pvbKb- zRHve6T-!j`{7?;`Ubv|hTYQFs{(z<56ph^tZHER?I}>CQj_Z|89jVupt%|xGk(*Vu zQla@t@@}nJ-lkb2-DfrV+{OI4SJ}m2wf~V%$+0Nw3UAQ3rKVKrL08?Tc__}uJSQ}> zgJSca9#-enX+5U*&I~K-8F+X6Km*H0$ZYD6+bo*)k4n_5tqAQ~<~@x|;R~~Cch0Ph zZxssZtwgaasAnAh6ZY2I-_S9yv*X!vH**!l8k?z)wV!Bv`FKDoQZSnb1;ahkC8Orj znp%omW?(zx{-J@xaQYl10HX{^zcWKqZi6er-qN7jZNV$?l$t4Ik_q!6gZp-dbHWJ6 z<$1%^zT1E9bG8Qwl&&|MCyIRfSU|c;y=B@FIDau|n$v%C*>pOWPNmG2q+1;CS3~_A zIQ8mwtUd8H-jp!@{}`n-AO!?K00ck)1V8`;KmY_l00ck)1RfCqy#GHUuy6|kAOHd& z00JNY0w4eaAOHd&00NH@0lfb|MwJ06AOHd&00JNY0w4eaAOHd&00JQJhzQ{Q{}F+O zTMz&N5C8!X009sH0T2KI5C8!Xc#H_({r@ql3`hY15C8!X009sH0T2KI5C8!X0D(tD zAVhxs;(H$P+u}cne<}X4_&#mm2LwO>1V8`;KmY_l00ck)1V8`;K;RJ(nD+ZTC!aF@ z5?j;w_o-o@Xa1D&mpNMZcC@Btecb2s%*?Pq6TtqYLC8y665Hax-G6F`Hs{!;`F98= z1)oPc$^VQA{mB@u)@s~i@Bf~OM-&p=f&d7B00@8p2!H?xfB*=900@8p2s{=9Ec5@x z$3hT9fB*=900@8p2!H?xfB*=900@8p2t0HGmiPaM?i&t400ck)1V8`;KmY_l00ck) M1V8`;9uETl2U^&nGXMYp literal 0 HcmV?d00001 diff --git a/installdependencies.sh b/installdependencies.sh index fe1e14b..d02e453 100644 --- a/installdependencies.sh +++ b/installdependencies.sh @@ -1 +1,2 @@ -py -m pip install django \ No newline at end of file +py -m pip install django +py -m pip install django_rest_framework \ No newline at end of file