From 7861ed7f45871689295be225e0d073de569dff40 Mon Sep 17 00:00:00 2001 From: Tony Nguyen Date: Fri, 19 Dec 2025 01:14:12 +0000 Subject: [PATCH 1/2] basic application in django --- src/DjangoDemo/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 146 bytes .../__pycache__/settings.cpython-312.pyc | Bin 0 -> 2435 bytes .../__pycache__/urls.cpython-312.pyc | Bin 0 -> 1113 bytes .../__pycache__/wsgi.cpython-312.pyc | Bin 0 -> 640 bytes src/DjangoDemo/asgi.py | 16 +++ src/DjangoDemo/settings.py | 119 ++++++++++++++++++ src/DjangoDemo/urls.py | 25 ++++ src/DjangoDemo/wsgi.py | 16 +++ src/db.sqlite3 | Bin 0 -> 139264 bytes src/manage.py | 22 ++++ src/products/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 144 bytes .../__pycache__/admin.cpython-312.pyc | Bin 0 -> 324 bytes src/products/__pycache__/apps.cpython-312.pyc | Bin 0 -> 393 bytes .../__pycache__/models.cpython-312.pyc | Bin 0 -> 882 bytes .../__pycache__/views.cpython-312.pyc | Bin 0 -> 400 bytes src/products/admin.py | 7 ++ src/products/apps.py | 5 + src/products/migrations/0001_initial.py | 30 +++++ .../migrations/0002_product_summary.py | 18 +++ ...ured_alter_product_description_and_more.py | 33 +++++ src/products/migrations/__init__.py | 0 .../__pycache__/0001_initial.cpython-312.pyc | Bin 0 -> 972 bytes .../0002_product_summary.cpython-312.pyc | Bin 0 -> 727 bytes ...oduct_description_and_more.cpython-312.pyc | Bin 0 -> 1260 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 155 bytes src/products/models.py | 9 ++ src/products/tests.py | 3 + src/products/views.py | 6 + 30 files changed, 309 insertions(+) create mode 100644 src/DjangoDemo/__init__.py create mode 100644 src/DjangoDemo/__pycache__/__init__.cpython-312.pyc create mode 100644 src/DjangoDemo/__pycache__/settings.cpython-312.pyc create mode 100644 src/DjangoDemo/__pycache__/urls.cpython-312.pyc create mode 100644 src/DjangoDemo/__pycache__/wsgi.cpython-312.pyc create mode 100644 src/DjangoDemo/asgi.py create mode 100644 src/DjangoDemo/settings.py create mode 100644 src/DjangoDemo/urls.py create mode 100644 src/DjangoDemo/wsgi.py create mode 100644 src/db.sqlite3 create mode 100755 src/manage.py create mode 100644 src/products/__init__.py create mode 100644 src/products/__pycache__/__init__.cpython-312.pyc create mode 100644 src/products/__pycache__/admin.cpython-312.pyc create mode 100644 src/products/__pycache__/apps.cpython-312.pyc create mode 100644 src/products/__pycache__/models.cpython-312.pyc create mode 100644 src/products/__pycache__/views.cpython-312.pyc create mode 100644 src/products/admin.py create mode 100644 src/products/apps.py create mode 100644 src/products/migrations/0001_initial.py create mode 100644 src/products/migrations/0002_product_summary.py create mode 100644 src/products/migrations/0003_product_featured_alter_product_description_and_more.py create mode 100644 src/products/migrations/__init__.py create mode 100644 src/products/migrations/__pycache__/0001_initial.cpython-312.pyc create mode 100644 src/products/migrations/__pycache__/0002_product_summary.cpython-312.pyc create mode 100644 src/products/migrations/__pycache__/0003_product_featured_alter_product_description_and_more.cpython-312.pyc create mode 100644 src/products/migrations/__pycache__/__init__.cpython-312.pyc create mode 100644 src/products/models.py create mode 100644 src/products/tests.py create mode 100644 src/products/views.py diff --git a/src/DjangoDemo/__init__.py b/src/DjangoDemo/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/src/DjangoDemo/__pycache__/__init__.cpython-312.pyc b/src/DjangoDemo/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4e7dc594fb55f3a615ebfb827f781706d29d16ca GIT binary patch literal 146 zcmX@j%ge<81WyYcGC}lX5P=Rpvj9b=GgLBYGWxA#C}INgK7-W!GSn~6FUl@1NK8&G z)_2KD%uCOANzKjIFD^<(=Elco=4F<|$LkeT{^GF7%}*)KNwq6t1)9JJ#Kj=SM`lJw J#v*1Q3jhp5B31wZ literal 0 HcmV?d00001 diff --git a/src/DjangoDemo/__pycache__/settings.cpython-312.pyc b/src/DjangoDemo/__pycache__/settings.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2f9dcb4690af540ed36eb16050b1fe8b1aa6020a GIT binary patch literal 2435 zcmb7GOLN;)6qfw9{D|YaZQ3%7GKCZeA`@ErU`mN%tEs1sZ7in&Ezl^wH;z(099_9d zv@&Zp>|oJVcT9f=D>hA8G^15!*uc(dhfP-;$xdRN%uqbGbniLm`_AK@bCcgvDTad2 zuh~WQWrCvq@HR)E$Z+xIPgwj!AxfeUjRG322c!T^1t=WA!RPeAYBPQWJ9$4JE;oH2 zCvtCfmQ0GEpcF+RDb}W>c$-4uXSBq?I|AR>Hc;b}Vxfw``7Kmau^>#m0zT+hwmIA2z2TT{T!@ zE0#U9yvBA35Dhulo7|^>y$__iX<=41fL~W^)ihZ6+8Zi(R5knw1b~?h+wPDr3I$}g z2siL>`!Xy@~V9aFwNv#>FXXRd12 zXE!#wTQ{~oMAOc~&iszNe&|ZhJ%*v+zPWEHI<9rR{wE{2iIP7~ z-o$ZTOCwHUNMvKZqruQ|YrudFbTk&+0MHz&iJSF%VaJx?+*%NqX_0);nH{G&ZN*u5 z3x>jWJ|5a0_n}v+Gwi(*I@iaHkIQog;7FGbxzRyU`BZb(*?n1)+9sOqRX-!IN8`auM+cniTPfvpQh3cy2tb*R6NxSA7rw<)N3Z5 z4fN8lFT~OT(B!DhbT8SDQ8|I$&t&&=QwK@*H5Iy=?gt||<}jWJNBY53D$tAf-=}i( zFQ^Q#hSU35Za*{i^WDA7wZm{Q12$pb<}wwZc#)C%!2sZ5{-!><`FeEI7;Mg`-V3~- jrus9~ek=?O1}a@6wFw|#hzb?rs3<}V2#~ntnkK%x9B~}kK1vZw zw;Snn`~^s;{3ndC5UCRrTdRtt6VFZ#MMy|sDam`z^Y^~*v;BE~-bOHPd}zlHYY2T; z$#m4q;N&d?6BMBiij2ri3~F{vL&deEMy-yeV=JlCMyFvQ6A>$_lSb6|G;;u$YUsIH zVh$IIy!sxVsb)odU>4uL*=g=J9Xr^A3H#ZTM>u3@FYb?cAY+!|9^<$@4AMSp6UuPL z*^q?Nwe6<^g11II$pR?}PsJ8aVj(eSBS{1XAb};ruVS(zT)Y7&lyQRN6aZ-foh2j? z1PelZ8^ah#nF-(XA{Gia(mki`LPkB3dbixGo@7}Z3QrY#&|Y}<{nr5nEaBT5qcqg4 zbz2R3&Bb@42nQ*SX~wwpG463jG2QJ3SyoOKGYYRR&Ld!?0rVOOyot}=W|vaDUvru;M8?S%C`FmT$b zr6x3P%W>=<>QFjHUJoJ~rw~}maricsy;@(6a!V!Zr*i&HL)Utb9Xp@tcH!`JyZJ)N z7i3BvZ*z4?^0|r#ZmF3CIA75yl%lYotNWN+B9?3H(NS)#r)V6 z9}q`9#4-0I?qQdG=_P*8#|ZFvdj(nNab;bvDqiB(&b?)ak%z!PzZ&(nW?pUUG!I^N zTWu0+H4sBG&>3lrnHuT_B$}j|9z$%yAZS|xZ&Pi+5IX|0#4st@u>`^lVIg;{uG;bYB;|=1RE81(T0tDukq|@ zr*#;0n@30OPOBTeIBdLp-aNgvet^(`wL%R|t(=#m$hnB3+|wq%vGfwgZiTR5&U~kp zmqATLrd1v|Acp}vkv6Yvh<-%#!qnwHo$BnhNm&eruJx$N;?1^T4%6A?_M_$NKF+ER z?LG}Mb$9&rF~SA literal 0 HcmV?d00001 diff --git a/src/DjangoDemo/asgi.py b/src/DjangoDemo/asgi.py new file mode 100644 index 00000000000..40843d60e54 --- /dev/null +++ b/src/DjangoDemo/asgi.py @@ -0,0 +1,16 @@ +""" +ASGI config for DjangoDemo 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/6.0/howto/deployment/asgi/ +""" + +import os + +from django.core.asgi import get_asgi_application + +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "DjangoDemo.settings") + +application = get_asgi_application() diff --git a/src/DjangoDemo/settings.py b/src/DjangoDemo/settings.py new file mode 100644 index 00000000000..032a9babeff --- /dev/null +++ b/src/DjangoDemo/settings.py @@ -0,0 +1,119 @@ +""" +Django settings for DjangoDemo project. + +Generated by 'django-admin startproject' using Django 6.0. + +For more information on this file, see +https://docs.djangoproject.com/en/6.0/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/6.0/ref/settings/ +""" + +from pathlib import Path + +# Build paths inside the project like this: BASE_DIR / 'subdir'. +BASE_DIR = Path(__file__).resolve().parent.parent + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/6.0/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = "django-insecure-^679e&ocj(x5@xo_8&@h*e&#lr24huq4q%d!z@x1x_f9=di_z1" + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +ALLOWED_HOSTS = [] + + +# Application definition + +INSTALLED_APPS = [ + "django.contrib.admin", + "django.contrib.auth", + "django.contrib.contenttypes", + "django.contrib.sessions", + "django.contrib.messages", + "django.contrib.staticfiles", + + 'products' +] + +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 = "DjangoDemo.urls" + +TEMPLATES = [ + { + "BACKEND": "django.template.backends.django.DjangoTemplates", + "DIRS": [], + "APP_DIRS": True, + "OPTIONS": { + "context_processors": [ + "django.template.context_processors.request", + "django.contrib.auth.context_processors.auth", + "django.contrib.messages.context_processors.messages", + ], + }, + }, +] + +WSGI_APPLICATION = "DjangoDemo.wsgi.application" + + +# Database +# https://docs.djangoproject.com/en/6.0/ref/settings/#databases + +DATABASES = { + "default": { + "ENGINE": "django.db.backends.sqlite3", + "NAME": BASE_DIR / "db.sqlite3", + } +} + + +# Password validation +# https://docs.djangoproject.com/en/6.0/ref/settings/#auth-password-validators + +AUTH_PASSWORD_VALIDATORS = [ + { + "NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator", + }, + { + "NAME": "django.contrib.auth.password_validation.MinimumLengthValidator", + }, + { + "NAME": "django.contrib.auth.password_validation.CommonPasswordValidator", + }, + { + "NAME": "django.contrib.auth.password_validation.NumericPasswordValidator", + }, +] + + +# Internationalization +# https://docs.djangoproject.com/en/6.0/topics/i18n/ + +LANGUAGE_CODE = "en-us" + +TIME_ZONE = "UTC" + +USE_I18N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/6.0/howto/static-files/ + +STATIC_URL = "static/" diff --git a/src/DjangoDemo/urls.py b/src/DjangoDemo/urls.py new file mode 100644 index 00000000000..6e9a1eab6e3 --- /dev/null +++ b/src/DjangoDemo/urls.py @@ -0,0 +1,25 @@ +""" +URL configuration for DjangoDemo project. + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/6.0/topics/http/urls/ +Examples: +Function views + 1. Add an import: from my_app import views + 2. Add a URL to urlpatterns: path('', views.home, name='home') +Class-based views + 1. Add an import: from other_app.views import Home + 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') +Including another URLconf + 1. Import the include() function: from django.urls import include, path + 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) +""" + +from django.contrib import admin +from django.urls import path +from products.views import home_view + +urlpatterns = [ + path("", home_view, name='home'), + path("admin/", admin.site.urls), +] diff --git a/src/DjangoDemo/wsgi.py b/src/DjangoDemo/wsgi.py new file mode 100644 index 00000000000..cfeeb6e863b --- /dev/null +++ b/src/DjangoDemo/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for DjangoDemo 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/6.0/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "DjangoDemo.settings") + +application = get_wsgi_application() diff --git a/src/db.sqlite3 b/src/db.sqlite3 new file mode 100644 index 0000000000000000000000000000000000000000..2e0ed721ba2544fe2f5ff717eebb172f90a1d425 GIT binary patch literal 139264 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 QVi4maGb1Bo5i^hl0I-cAx&QzG literal 0 HcmV?d00001 diff --git a/src/products/__pycache__/admin.cpython-312.pyc b/src/products/__pycache__/admin.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0c30b2b15f921c004d81d1e614bdade45be01de5 GIT binary patch literal 324 zcmX@j%ge<81P_y65 zCfhB(l&r+O^nAVK{JfH)%%mcalWwu)=BK3Q6c@3AI4s4PC8@VKic-@vi%U|ARx*4B ziZcAt(J#+0$}TQQOinGZUtE-|UjQ+`SRZVyUP0wA4jZ76r8%i~MZ7@G uAa@ii0*MdIjEszT85F*Y~8aErYPjL!fw5XR{m1Ut07r=tzA;WCcwVYPKG#6^+c&Zco&ZV@|C?-E%;0wHn;4UVB%8lG8gU&(^c<44tc zD_eAW;#rl=SRQ2wW7UwcjQUc|M~pqpqqM77Ik}`llt}6=xEk7y2RG@NqgU^ b+##vIR(k|LCL(^q;qM0G!OQg@P-3Xj3KEF02b(H__yZ3bZ9yywJ*|gzx-&^Po&DkLE+)4K zJ?Keq{R@Oja_FDnT@VTZ%YY{@<|afhJvp<}q!Dyj-hSVk&zpJs_I<9^DnP97A6ou% zDBjYUE#pK?Zws*pFu;(406Gu?4XgpI?E83V&G^RAbPjF2r7-?NE?bm<#LRisw!{MVjb(F!cbE&r<8MN7YU`Y zfs3QkoHPG>UU_8BZ>{9i`G1_Ik1BJj+F!D(y!4bsIP=m;PvD{hl>qfzO2SUMy=iOQ z*rF)h;e{}xbRw(ue~8A3jWd{det@VOQ{<6Euh;;<%V70CeBM-!CR_J#uGWT xs;r9=%;`%)9hdK__TFQcg)65rxgg9>9YXjGEdMGR@YuMWY6*#Pagd90V_>7OM+bh=M5s*95s;aweX8?3@v;Qsh7Q4+4^( zl14~(#41&~z;#xcl}iR@=FJ=4+mH8J?SN5KU%l~~`j;O5!pK2(N?^q}<1k?n_y8Ik z6C*Nxld$>1d~0Djg>NlbLt5=7Njwx7%P9&6(xMVmE>r-yp>AfLS%bieCI34PZ#lkU zj?rHpwZm4Yd)?~|?AyVx=h-K=W|TG{Z*znkwZPt8xO1rCzW zVnh+%!FkXHEKuo=?R zltpA(&lwD*N`hH}N_*_h)=cSdRV6CBQahrvC!(XYy}l~esr;A#ux004c9sG) zkM&fKUM2lcyd)INGN*zk!9$=Gp(kfH2^A{ngPr}}yzen@zHh!vO=*C|S7XKdApr1= zCzFuJ;B=XRLx2E+K4?ML+qlf`j<*;m`yU+j-<-O1q;;9NJnGQWIyqCP>c&KeEt+{j0@QY6 zDtKs(3Qt!}iRw-}4s4fTC&q~8LgFU&ZaGa%<=BgT zOmhfFF7ZMxGL>1Ui<$6JN>O$^?4xMY%+ai!cG))7Y@0dJ_A$e{ZNF?gJ}0v*sjYqtJ12R9$U2t$MJEn?W@qZZ#aq5mhhVO0`z2-M7cnEQKAyA6&X{5Pe|FJ~){+ z_SR3X%Ctyk1{TrXt?&JUf literal 0 HcmV?d00001 diff --git a/src/products/migrations/__pycache__/0002_product_summary.cpython-312.pyc b/src/products/migrations/__pycache__/0002_product_summary.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..52ea93afc06c0b4eadf3832fb2d5cc703427399e GIT binary patch literal 727 zcmY*W&x_MQ6n>MWlOJ?tHwdeC4^mbkmreEJL0u3^1<^fu%4Lk5*^-)HW*W5ML17Ob z_qP9l2W9s^@l+66=IY5?p)10koJkX^LwNIjZ{B-(-+SM;wj7XW@TDJpKmb1#X-=yK zt3wISfC5D^Bq%_M7H9}GcnVZI0je`J#!b@ZKG)Yc(5Hsi`lX1c2`7n0ML3DFlnb0> zl*N3w$pJ8HvU(-K888SCg+QZdgaTayW{j(b|4jke232o(eC>a~V$`^3ol9xzT;QfD zSoSR4jK3R<1ig%eU@ZCFNS_2&fl!S zmoo2@`hnEq4)STC_E{MP_+x2KV2Q!Lv(&Zg_~Y}X1NPo$XKr<7R%fw$d$DtC;dW2& z&fV_J?S6gu!+mgR8n(04v5P-FD{eIPjyyxyv}){tzOEEjy4HW(Rbf@^O^L3oN9!>i k79B~|68WAqOC2Hf2LtjhaU0=NXTH5Z+ur{Tl2qA$0hBAX1poj5 literal 0 HcmV?d00001 diff --git a/src/products/migrations/__pycache__/0003_product_featured_alter_product_description_and_more.cpython-312.pyc b/src/products/migrations/__pycache__/0003_product_featured_alter_product_description_and_more.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c2c93f0459b3d038526f2c2b8c7dd0b037715a4c GIT binary patch literal 1260 zcmb7D&1(}u6rb5_wwrBI(NQUCJlpebH?gJl}W~M7@*<)^MLZmoW ziy5Kixj`g39-($%@>D8uIpCbEV16k@O-xWzAh?B_839qTog&f`@FfD_IjKE0795#G z>}B_Xi%U;Ri;9_wNpxHT(?raqjz<%lh`=T93yJqnT)CL5bP1P2CVTn+;wr>kH!k6t z>RtQ0!X*q_i`?g`y0BDVEomedk%F2dTXw&0ufWyUc#-?s7++5WPk*vpe>w2Wx^UJv&O^{Gp!Yg#m5{0&C(G9k}+olN9ze#P@_YPfMIQkLzIvc%4<(d{rX z^Npm&QR3;QF~TUGPe%{<3pxQlbk?rD^VnA4^JZ#|w&AwC26enzz|2}Y@7l$?ufgOW zo=-lVvu^M@&ckB^)eVOq*nWCb??!kT0fl-a|*}JaolWQo{e#H1GU0&mA+cpD;+cr)yG#L zZ;de?y!i&4FRn&jaGHneVuHJKU6nq(WbDA8fGxYza@mVQ>l!lUFE1a-!IPpLg2)w{{TkCH9-IX literal 0 HcmV?d00001 diff --git a/src/products/migrations/__pycache__/__init__.cpython-312.pyc b/src/products/migrations/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..334b3d6015a368240b49520aa32fcc0008b6cd3a GIT binary patch literal 155 zcmX@j%ge<81Z#^OGC}lX5P=Rpvj9b=GgLBYGWxA#C}INgK7-W!veGZlFUl@1NK8&G z)_2KD%uCOANzKjIFD^>fFDS}SDNQaZ*3ZpMFG?)Q%+D*gjEsy$%s>_Zl?)~^ literal 0 HcmV?d00001 diff --git a/src/products/models.py b/src/products/models.py new file mode 100644 index 00000000000..5aff122dc8a --- /dev/null +++ b/src/products/models.py @@ -0,0 +1,9 @@ +from django.db import models + + +class Product(models.Model): + title = models.CharField(max_length=120) + description = models.TextField(blank=True, null=True) + price = models.DecimalField(decimal_places=2, max_digits=1000) + summary = models.TextField(default="asdasdasd") + featured = models.BooleanField(null=True) diff --git a/src/products/tests.py b/src/products/tests.py new file mode 100644 index 00000000000..7ce503c2dd9 --- /dev/null +++ b/src/products/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/src/products/views.py b/src/products/views.py new file mode 100644 index 00000000000..554f810e0f0 --- /dev/null +++ b/src/products/views.py @@ -0,0 +1,6 @@ +from django.http import HttpResponse +from django.shortcuts import render + +# Create your views here. +def home_view(asd): + return HttpResponse("

HELLO WORLD !

") \ No newline at end of file From d913c5e91c36d4e1070b23d9eb9ecc9b183bfe5b Mon Sep 17 00:00:00 2001 From: Tony Nguyen Date: Tue, 23 Dec 2025 04:35:53 +0000 Subject: [PATCH 2/2] tinkering with Django --- .gitignore | 2 ++ CACHEDIR.TAG | 4 ++++ manage.py | 22 ++++++++++++++++++++++ pyvenv.cfg | 8 ++++++++ 4 files changed, 36 insertions(+) create mode 100644 .gitignore create mode 100644 CACHEDIR.TAG create mode 100755 manage.py create mode 100644 pyvenv.cfg diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000000..0d017ea3638 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +# created by virtualenv automatically + diff --git a/CACHEDIR.TAG b/CACHEDIR.TAG new file mode 100644 index 00000000000..837feeff9a4 --- /dev/null +++ b/CACHEDIR.TAG @@ -0,0 +1,4 @@ +Signature: 8a477f597d28d172789f06886806bc55 +# This file is a cache directory tag created by Python virtualenv. +# For information about cache directory tags, see: +# https://bford.info/cachedir/ \ No newline at end of file diff --git a/manage.py b/manage.py new file mode 100755 index 00000000000..7fb79aae5c3 --- /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', 'DjangoDemo.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() diff --git a/pyvenv.cfg b/pyvenv.cfg new file mode 100644 index 00000000000..cd1b031dcd2 --- /dev/null +++ b/pyvenv.cfg @@ -0,0 +1,8 @@ +home = /usr/bin +implementation = CPython +version_info = 3.12.3.final.0 +virtualenv = 20.35.4 +include-system-site-packages = false +base-prefix = /usr +base-exec-prefix = /usr +base-executable = /usr/bin/python3.12