From 619d9b4b2799a611fe6ebd2eb610d26350fc2566 Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Mon, 20 Apr 2026 14:27:34 +0000 Subject: [PATCH] feat: initial commit --- app/__init__.py | 0 app/__pycache__/__init__.cpython-313.pyc | Bin 0 -> 136 bytes app/__pycache__/urls.cpython-313.pyc | Bin 0 -> 301 bytes app/__pycache__/views.cpython-313.pyc | Bin 0 -> 391 bytes app/admin.py | 3 + app/apps.py | 5 + app/migrations/__init__.py | 0 app/models.py | 3 + app/tests.py | 3 + app/urls.py | 6 + app/views.py | 7 + db.sqlite3 | Bin 0 -> 131072 bytes hola_mundo/__init__.py | 0 .../__pycache__/__init__.cpython-313.pyc | Bin 0 -> 143 bytes .../__pycache__/settings.cpython-313.pyc | Bin 0 -> 2475 bytes hola_mundo/__pycache__/urls.cpython-313.pyc | Bin 0 -> 1086 bytes hola_mundo/__pycache__/wsgi.cpython-313.pyc | Bin 0 -> 637 bytes hola_mundo/asgi.py | 16 +++ hola_mundo/settings.py | 123 ++++++++++++++++++ hola_mundo/urls.py | 23 ++++ hola_mundo/wsgi.py | 16 +++ manage.py | 22 ++++ 22 files changed, 227 insertions(+) create mode 100644 app/__init__.py create mode 100644 app/__pycache__/__init__.cpython-313.pyc create mode 100644 app/__pycache__/urls.cpython-313.pyc create mode 100644 app/__pycache__/views.cpython-313.pyc create mode 100644 app/admin.py create mode 100644 app/apps.py create mode 100644 app/migrations/__init__.py create mode 100644 app/models.py create mode 100644 app/tests.py create mode 100644 app/urls.py create mode 100644 app/views.py create mode 100644 db.sqlite3 create mode 100644 hola_mundo/__init__.py create mode 100644 hola_mundo/__pycache__/__init__.cpython-313.pyc create mode 100644 hola_mundo/__pycache__/settings.cpython-313.pyc create mode 100644 hola_mundo/__pycache__/urls.cpython-313.pyc create mode 100644 hola_mundo/__pycache__/wsgi.cpython-313.pyc create mode 100644 hola_mundo/asgi.py create mode 100644 hola_mundo/settings.py create mode 100644 hola_mundo/urls.py create mode 100644 hola_mundo/wsgi.py create mode 100755 manage.py diff --git a/app/__init__.py b/app/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/app/__pycache__/__init__.cpython-313.pyc b/app/__pycache__/__init__.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a59b0c3d29b5e91c0763bc72b93f43d17a4d023a GIT binary patch literal 136 zcmey&%ge<81WL}2GC}lX5CH>>P{wB#AY&>+I)f&o-%5reCLr%KNa~ilenx(7s(xuw zX(W^X1h<|1YV zh8RXAhG3Q$<{%E3Mg(oj1Yzql7O|$YYO=iqaWxrlu@oehWV~dAa9GPSQ_G91*fLUc za`N^4G}&%(r(`AOrRVFF7UdKdF#}cIVklw-Q7jqxIf=Kpf#N^|N>YpRidQmx21+p8 zQr6GN&rQ`YO)AYRDFw1~6614A^HTEl6AKFTLFVWcRNmsS$<0qG%}KQ@;sxpfSzoLK tBt9@RGBVy}kh#ks{E>};m9s-)g6VXtiB^|cL@IWPZ2CxzydyELk_${*ccf@ z6HLVBF#~IAxwUT+xV)%?NFxC&UhEI@Ji8Vulc^FDPJCr1X7aL)Vaaa)xqx3)*kP_Q zemV5xUVk8xM4oqUBqY&^?_mWj)Ztw_ARe_)xgt@gaJ*Q~g{SXznrp;KcsJK+B)u@p zyr-FXR^4n-SVX`sDr)HJ0K+T$u#eX5i+8)Xwt6L2*x0QVt>__4r?RVJ3He0l3TWxV vuF5e!4`{}A*op!DCN!v};m>8H6VV46Pur;$h98r2zF}t@=9G2LFSm+ccb8Zz literal 0 HcmV?d00001 diff --git a/app/admin.py b/app/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/app/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/app/apps.py b/app/apps.py new file mode 100644 index 0000000..80b2c8d --- /dev/null +++ b/app/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class AppConfig(AppConfig): + name = 'app' diff --git a/app/migrations/__init__.py b/app/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/app/models.py b/app/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/app/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/app/tests.py b/app/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/app/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/app/urls.py b/app/urls.py new file mode 100644 index 0000000..0483b4e --- /dev/null +++ b/app/urls.py @@ -0,0 +1,6 @@ +from django.urls import path +from . import views + +urlpatterns = [ + path('hello/', views.hola), +] diff --git a/app/views.py b/app/views.py new file mode 100644 index 0000000..c5ad736 --- /dev/null +++ b/app/views.py @@ -0,0 +1,7 @@ +from django.shortcuts import render +from django.http import HttpResponse + + +def hola(request): + return HttpResponse("

Hello, World!

") +# Create your views here. diff --git a/db.sqlite3 b/db.sqlite3 new file mode 100644 index 0000000000000000000000000000000000000000..68ef12a2814579e1f080776cfc30dda183ecce70 GIT binary patch literal 131072 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�$BzLxSMk z3XYy&U6bEnJJ5p*K{f2qI)`}YH0=oD^EJLMJmbH!{RMt~Yr~FnrBY>^F9=U7sE+JJ zv5e}V0tJ)+vLlG zVuuS{opanGdyd?7-1&E*{{zFoOVjkRCqn!Fo}=h%#{nvq{3-O~qxaGIgXsKk(VOq1iwDug_tD%z zG}jLe5>%o__alP<6^{4)Cn4XgryoB_1yi1W;v^MHcwjG0CFlFGL5NE8^kFh}n4UX| zF(;JoW@6wCq$9`Ss6R09#^auTc@#OJUk!?y%R9Fw8T0|_i6%Sp1fE3bfGP|3S%!HYV+Tx|R zdTS3-@IUbH>B(FKJ$Y+cygQRk=pqO@hutqP?|tuk-^+~KZ41fs>ht$_xq;9R^-!N? z1;!sF_=I|hp`O;$x3o>2>7a09tFdV?W7A|NpdI4|>KQxw_LZ98@_&2&64$7!Pf%HB z?wGQArmIb2^*dK*tzpw{1&1=(db#}!LP`elFlT{?DS-iHFrrD|r#XozWQ^|NP&k(L zVuWEgXGsYeZAL0whTB zgO0)-+j^V?oZs%t!J;YFzp0>NgqafJl!|LPPbJs?s8RV&z*Q#bhW= zDEq0=)RJp|HcDeaN|EbPxp>KjL1m>kv1_spM;Ts=ta4XMQ~p_PKcPcc8d!Jgs6ffv zv2E+8`Z#T^FoP(KiLDoga=d6(*#|Ra+%3>SOPQwRJhx|yrtiy-#`lZ)N~au8u(;3U zg+s;Mlz3*y2s2gK;IY7kp*V`UsWpE=WBD2t%dT3foA+}fa*69ZFb!3)lkFF+)s#kg zf*-Q0vQ%9$zAAst8=9tF=nI4c)q!LFVky_2cfTcjBF{ovfW1H@_OKqiY{u VAHO+k!Yx15VdzhQ#mw3Kzp_-ED8;{@VoFD(0JQPZ}8+h@ZO_K^bM?k2J2TF!BxBS73}|LZhmP#xNNA~ Gj`SaBmbqX6 literal 0 HcmV?d00001 diff --git a/hola_mundo/asgi.py b/hola_mundo/asgi.py new file mode 100644 index 0000000..b39a9e7 --- /dev/null +++ b/hola_mundo/asgi.py @@ -0,0 +1,16 @@ +""" +ASGI config for hola_mundo 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', 'hola_mundo.settings') + +application = get_asgi_application() diff --git a/hola_mundo/settings.py b/hola_mundo/settings.py new file mode 100644 index 0000000..3bf04b7 --- /dev/null +++ b/hola_mundo/settings.py @@ -0,0 +1,123 @@ +""" +Django settings for hola_mundo project. + +Generated by 'django-admin startproject' using Django 6.0.4. + +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-t4nm2j168)p5h+qre%4$$1(^gx8g0q@bj4ovh3ybf1%8du$k_%' + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +# settings.py + +ALLOWED_HOSTS = [ + 'django.agofer.net', + '172.16.10.8', + '127.0.0.1' +] + + +# Application definition + +INSTALLED_APPS = [ + '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 = 'hola_mundo.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 = 'hola_mundo.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/hola_mundo/urls.py b/hola_mundo/urls.py new file mode 100644 index 0000000..2b09236 --- /dev/null +++ b/hola_mundo/urls.py @@ -0,0 +1,23 @@ +""" +URL configuration for hola_mundo 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, include + +urlpatterns = [ + path('admin/', admin.site.urls), + path('', include('app.urls')), +] diff --git a/hola_mundo/wsgi.py b/hola_mundo/wsgi.py new file mode 100644 index 0000000..25872c1 --- /dev/null +++ b/hola_mundo/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for hola_mundo 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', 'hola_mundo.settings') + +application = get_wsgi_application() diff --git a/manage.py b/manage.py new file mode 100755 index 0000000..1308a5c --- /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', 'hola_mundo.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()