From 35c97349f00f4dce30895524fe4ccac2ef5b7dd5 Mon Sep 17 00:00:00 2001 From: Celestino Rey Date: Thu, 18 Jul 2024 13:15:06 +0200 Subject: [PATCH] App de ejemplo con Django --- Django/README.md | 3 + Django/mysite/db.sqlite3 | Bin 0 -> 143360 bytes Django/mysite/manage.py | 22 ++++ Django/mysite/mysite/__init__.py | 0 Django/mysite/mysite/asgi.py | 16 +++ Django/mysite/mysite/settings.py | 124 ++++++++++++++++++ Django/mysite/mysite/urls.py | 23 ++++ Django/mysite/mysite/wsgi.py | 16 +++ Django/mysite/polls/__init__.py | 0 Django/mysite/polls/admin.py | 6 + Django/mysite/polls/apps.py | 6 + .../mysite/polls/migrations/0001_initial.py | 32 +++++ Django/mysite/polls/migrations/__init__.py | 0 Django/mysite/polls/models.py | 26 ++++ .../mysite/polls/templates/polls/detail.html | 6 + .../mysite/polls/templates/polls/index.html | 9 ++ Django/mysite/polls/tests.py | 3 + Django/mysite/polls/urls.py | 16 +++ Django/mysite/polls/views.py | 26 ++++ 19 files changed, 334 insertions(+) create mode 100644 Django/README.md create mode 100644 Django/mysite/db.sqlite3 create mode 100755 Django/mysite/manage.py create mode 100644 Django/mysite/mysite/__init__.py create mode 100644 Django/mysite/mysite/asgi.py create mode 100644 Django/mysite/mysite/settings.py create mode 100644 Django/mysite/mysite/urls.py create mode 100644 Django/mysite/mysite/wsgi.py create mode 100644 Django/mysite/polls/__init__.py create mode 100644 Django/mysite/polls/admin.py create mode 100644 Django/mysite/polls/apps.py create mode 100644 Django/mysite/polls/migrations/0001_initial.py create mode 100644 Django/mysite/polls/migrations/__init__.py create mode 100644 Django/mysite/polls/models.py create mode 100644 Django/mysite/polls/templates/polls/detail.html create mode 100644 Django/mysite/polls/templates/polls/index.html create mode 100644 Django/mysite/polls/tests.py create mode 100644 Django/mysite/polls/urls.py create mode 100644 Django/mysite/polls/views.py diff --git a/Django/README.md b/Django/README.md new file mode 100644 index 0000000..b2c76d2 --- /dev/null +++ b/Django/README.md @@ -0,0 +1,3 @@ +# Fuente usada + +https://docs.djangoproject.com/en/5.0/intro/tutorial01/ \ No newline at end of file diff --git a/Django/mysite/db.sqlite3 b/Django/mysite/db.sqlite3 new file mode 100644 index 0000000000000000000000000000000000000000..64c823208acfa852363fcfc4e4c85bdff77fb389 GIT binary patch literal 143360 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 E0g8f#Gynhq literal 0 HcmV?d00001 diff --git a/Django/mysite/manage.py b/Django/mysite/manage.py new file mode 100755 index 0000000..a7da667 --- /dev/null +++ b/Django/mysite/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', 'mysite.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/Django/mysite/mysite/__init__.py b/Django/mysite/mysite/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Django/mysite/mysite/asgi.py b/Django/mysite/mysite/asgi.py new file mode 100644 index 0000000..cb29d22 --- /dev/null +++ b/Django/mysite/mysite/asgi.py @@ -0,0 +1,16 @@ +""" +ASGI config for mysite 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/5.0/howto/deployment/asgi/ +""" + +import os + +from django.core.asgi import get_asgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings') + +application = get_asgi_application() diff --git a/Django/mysite/mysite/settings.py b/Django/mysite/mysite/settings.py new file mode 100644 index 0000000..4257e30 --- /dev/null +++ b/Django/mysite/mysite/settings.py @@ -0,0 +1,124 @@ +""" +Django settings for mysite project. + +Generated by 'django-admin startproject' using Django 5.0.7. + +For more information on this file, see +https://docs.djangoproject.com/en/5.0/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/5.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/5.0/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = 'django-insecure-wussf@h6r5!#*1ko$6k!h9i2%sv-a3y)m6v6$ehn4_a0t0b01&' + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +ALLOWED_HOSTS = [] + + +# Application definition + +INSTALLED_APPS = [ + "polls.apps.PollsConfig", + '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 = 'mysite.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 = 'mysite.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/5.0/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': BASE_DIR / 'db.sqlite3', + } +} + + +# Password validation +# https://docs.djangoproject.com/en/5.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/5.0/topics/i18n/ + +LANGUAGE_CODE = 'es-es' + +TIME_ZONE = 'Europe/Madrid' + +USE_I18N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/5.0/howto/static-files/ + +STATIC_URL = 'static/' + +# Default primary key field type +# https://docs.djangoproject.com/en/5.0/ref/settings/#default-auto-field + +DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' diff --git a/Django/mysite/mysite/urls.py b/Django/mysite/mysite/urls.py new file mode 100644 index 0000000..a3df621 --- /dev/null +++ b/Django/mysite/mysite/urls.py @@ -0,0 +1,23 @@ +""" +URL configuration for mysite project. + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/5.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("polls/", include("polls.urls")), + path('admin/', admin.site.urls), +] diff --git a/Django/mysite/mysite/wsgi.py b/Django/mysite/mysite/wsgi.py new file mode 100644 index 0000000..1925037 --- /dev/null +++ b/Django/mysite/mysite/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for mysite 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/5.0/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings') + +application = get_wsgi_application() diff --git a/Django/mysite/polls/__init__.py b/Django/mysite/polls/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Django/mysite/polls/admin.py b/Django/mysite/polls/admin.py new file mode 100644 index 0000000..1f194a0 --- /dev/null +++ b/Django/mysite/polls/admin.py @@ -0,0 +1,6 @@ +from django.contrib import admin + +# Register your models here. +from .models import Question + +admin.site.register(Question) \ No newline at end of file diff --git a/Django/mysite/polls/apps.py b/Django/mysite/polls/apps.py new file mode 100644 index 0000000..5a5f94c --- /dev/null +++ b/Django/mysite/polls/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class PollsConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'polls' diff --git a/Django/mysite/polls/migrations/0001_initial.py b/Django/mysite/polls/migrations/0001_initial.py new file mode 100644 index 0000000..370ace2 --- /dev/null +++ b/Django/mysite/polls/migrations/0001_initial.py @@ -0,0 +1,32 @@ +# Generated by Django 5.0.7 on 2024-07-18 08:36 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Question', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('question_text', models.CharField(max_length=200)), + ('pub_date', models.DateTimeField(verbose_name='date published')), + ], + ), + migrations.CreateModel( + name='Choice', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('choice_text', models.CharField(max_length=200)), + ('votes', models.IntegerField(default=0)), + ('question', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='polls.question')), + ], + ), + ] diff --git a/Django/mysite/polls/migrations/__init__.py b/Django/mysite/polls/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Django/mysite/polls/models.py b/Django/mysite/polls/models.py new file mode 100644 index 0000000..44b2d7c --- /dev/null +++ b/Django/mysite/polls/models.py @@ -0,0 +1,26 @@ +import datetime +from django.db import models +from django.utils import timezone + +# Create your models here. + +class Question(models.Model): + question_text = models.CharField(max_length=200) + pub_date = models.DateTimeField("date published") + + def __str__(self): + return self.question_text + + def was_published_recently(self): + return self.pub_date >= timezone.now() - datetime.timedelta(days=1) + + +class Choice(models.Model): + question = models.ForeignKey(Question, on_delete=models.CASCADE) + choice_text = models.CharField(max_length=200) + votes = models.IntegerField(default=0) + + def __str__(self): + return self.choice_text + + diff --git a/Django/mysite/polls/templates/polls/detail.html b/Django/mysite/polls/templates/polls/detail.html new file mode 100644 index 0000000..4e1bd67 --- /dev/null +++ b/Django/mysite/polls/templates/polls/detail.html @@ -0,0 +1,6 @@ +

{{ question.question_text }}

+
    +{% for choice in question.choice_set.all %} +
  • {{ choice.choice_text }}
  • +{% endfor %} +
\ No newline at end of file diff --git a/Django/mysite/polls/templates/polls/index.html b/Django/mysite/polls/templates/polls/index.html new file mode 100644 index 0000000..cc41400 --- /dev/null +++ b/Django/mysite/polls/templates/polls/index.html @@ -0,0 +1,9 @@ +{% if latest_question_list %} + +{% else %} +

No polls are available.

+{% endif %} \ No newline at end of file diff --git a/Django/mysite/polls/tests.py b/Django/mysite/polls/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/Django/mysite/polls/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/Django/mysite/polls/urls.py b/Django/mysite/polls/urls.py new file mode 100644 index 0000000..c9cd57c --- /dev/null +++ b/Django/mysite/polls/urls.py @@ -0,0 +1,16 @@ +from django.urls import path + +from . import views + +app_name = "polls" + +urlpatterns = [ + # ex: /polls/ + path("", views.index, name="index"), + # ex: /polls/5/ + path("/", views.detail, name="detail"), + # ex: /polls/5/results/ + path("/results/", views.results, name="results"), + # ex: /polls/5/vote/ + path("/vote/", views.vote, name="vote"), +] \ No newline at end of file diff --git a/Django/mysite/polls/views.py b/Django/mysite/polls/views.py new file mode 100644 index 0000000..4e674eb --- /dev/null +++ b/Django/mysite/polls/views.py @@ -0,0 +1,26 @@ +from django.shortcuts import get_object_or_404, render +from django.http import HttpResponse, Http404 +from django.template import loader + + + +from .models import Question + +# Create your views here. + +def index(request): + latest_question_list = Question.objects.order_by("-pub_date")[:5] + context = {"latest_question_list": latest_question_list} + return render(request, "polls/index.html", context) + +def detail(request, question_id): + question = get_object_or_404(Question, pk=question_id) + return render(request, "polls/detail.html", {"question": question}) + +def results(request, question_id): + response = "You're looking at the results of question %s." + return HttpResponse(response % question_id) + + +def vote(request, question_id): + return HttpResponse("You're voting on question %s." % question_id) \ No newline at end of file