From b07813a859b4f67624b4c39821836c8f1bdeb919 Mon Sep 17 00:00:00 2001 From: clonbg Date: Thu, 16 Feb 2023 11:40:04 +0100 Subject: [PATCH] Primer commit iniciando proyecto --- README.md | 8 +- authentication/__init__.py | 0 authentication/admin.py | 3 + authentication/apps.py | 6 + authentication/migrations/__init__.py | 0 authentication/models.py | 3 + authentication/tests.py | 3 + authentication/urls.py | 6 + authentication/views.py | 12 + comparte/__init__.py | 0 comparte/admin.py | 3 + comparte/apps.py | 6 + comparte/migrations/__init__.py | 0 comparte/models.py | 3 + comparte/tests.py | 3 + comparte/views.py | 3 + compra/__init__.py | 0 compra/admin.py | 3 + compra/apps.py | 6 + compra/migrations/__init__.py | 0 compra/models.py | 3 + compra/tests.py | 3 + compra/views.py | 3 + database/bd.dia | 1177 +++++++++++++++++++++++++ item/__init__.py | 0 item/admin.py | 3 + item/apps.py | 6 + item/migrations/__init__.py | 0 item/models.py | 3 + item/tests.py | 3 + item/views.py | 3 + lista/__init__.py | 0 lista/admin.py | 3 + lista/apps.py | 6 + lista/migrations/__init__.py | 0 lista/models.py | 3 + lista/tests.py | 3 + lista/views.py | 3 + listaCompra/__init__.py | 0 listaCompra/asgi.py | 16 + listaCompra/settings.py | 117 +++ listaCompra/urls.py | 7 + listaCompra/wsgi.py | 16 + manage.py | 22 + readmeImgs/bd.png | Bin 0 -> 23582 bytes requirements.txt | 6 + 46 files changed, 1473 insertions(+), 1 deletion(-) create mode 100644 authentication/__init__.py create mode 100644 authentication/admin.py create mode 100644 authentication/apps.py create mode 100644 authentication/migrations/__init__.py create mode 100644 authentication/models.py create mode 100644 authentication/tests.py create mode 100644 authentication/urls.py create mode 100644 authentication/views.py create mode 100644 comparte/__init__.py create mode 100644 comparte/admin.py create mode 100644 comparte/apps.py create mode 100644 comparte/migrations/__init__.py create mode 100644 comparte/models.py create mode 100644 comparte/tests.py create mode 100644 comparte/views.py create mode 100644 compra/__init__.py create mode 100644 compra/admin.py create mode 100644 compra/apps.py create mode 100644 compra/migrations/__init__.py create mode 100644 compra/models.py create mode 100644 compra/tests.py create mode 100644 compra/views.py create mode 100644 database/bd.dia create mode 100644 item/__init__.py create mode 100644 item/admin.py create mode 100644 item/apps.py create mode 100644 item/migrations/__init__.py create mode 100644 item/models.py create mode 100644 item/tests.py create mode 100644 item/views.py create mode 100644 lista/__init__.py create mode 100644 lista/admin.py create mode 100644 lista/apps.py create mode 100644 lista/migrations/__init__.py create mode 100644 lista/models.py create mode 100644 lista/tests.py create mode 100644 lista/views.py create mode 100644 listaCompra/__init__.py create mode 100644 listaCompra/asgi.py create mode 100644 listaCompra/settings.py create mode 100644 listaCompra/urls.py create mode 100644 listaCompra/wsgi.py create mode 100755 manage.py create mode 100644 readmeImgs/bd.png create mode 100644 requirements.txt diff --git a/README.md b/README.md index 8b8e483..779d396 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,9 @@ # django-quasar-lista-compra -Lista de la compra \ No newline at end of file +Lista de la compra + +![bd.png](./readmeImgs/bd.png) + +### Proceso + +- ([Build And Deploy A REST API With Django REST Framework. Full Project Tutorial. - YouTube 00:26:15](https://youtu.be/Sjv-HTLmnB4)) \ No newline at end of file diff --git a/authentication/__init__.py b/authentication/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/authentication/admin.py b/authentication/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/authentication/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/authentication/apps.py b/authentication/apps.py new file mode 100644 index 0000000..8bab8df --- /dev/null +++ b/authentication/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class AuthenticationConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'authentication' diff --git a/authentication/migrations/__init__.py b/authentication/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/authentication/models.py b/authentication/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/authentication/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/authentication/tests.py b/authentication/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/authentication/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/authentication/urls.py b/authentication/urls.py new file mode 100644 index 0000000..8a86c17 --- /dev/null +++ b/authentication/urls.py @@ -0,0 +1,6 @@ +from django.urls import path +from . import views + +urlpatterns = [ + path('', views.HelloAuthView.as_view(), name='hello_auth'), +] diff --git a/authentication/views.py b/authentication/views.py new file mode 100644 index 0000000..38bb4e1 --- /dev/null +++ b/authentication/views.py @@ -0,0 +1,12 @@ +# from django.shortcuts import render +from rest_framework import generics, status +from rest_framework.response import Response + +# Create your views here. + + +class HelloAuthView(generics.GenericAPIView): + + def get(self, request): + return Response(data={"message": "Hello Auth"}, + status=status.HTTP_200_OK) diff --git a/comparte/__init__.py b/comparte/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/comparte/admin.py b/comparte/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/comparte/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/comparte/apps.py b/comparte/apps.py new file mode 100644 index 0000000..faa1b25 --- /dev/null +++ b/comparte/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class ComparteConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'comparte' diff --git a/comparte/migrations/__init__.py b/comparte/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/comparte/models.py b/comparte/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/comparte/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/comparte/tests.py b/comparte/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/comparte/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/comparte/views.py b/comparte/views.py new file mode 100644 index 0000000..91ea44a --- /dev/null +++ b/comparte/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/compra/__init__.py b/compra/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/compra/admin.py b/compra/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/compra/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/compra/apps.py b/compra/apps.py new file mode 100644 index 0000000..9418611 --- /dev/null +++ b/compra/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class CompraConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'compra' diff --git a/compra/migrations/__init__.py b/compra/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/compra/models.py b/compra/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/compra/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/compra/tests.py b/compra/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/compra/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/compra/views.py b/compra/views.py new file mode 100644 index 0000000..91ea44a --- /dev/null +++ b/compra/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/database/bd.dia b/database/bd.dia new file mode 100644 index 0000000..863f026 --- /dev/null +++ b/database/bd.dia @@ -0,0 +1,1177 @@ + + + + + + + + + + + + + #A4# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #Authentication# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #id_authentication# + + + #integer# + + + ## + + + ## + + + + + + + + + + + + + + #Email# + + + #email# + + + ## + + + ## + + + + + + + + + + + + + + #Password# + + + #password# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #Lista# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #id_lista# + + + #integer# + + + ## + + + ## + + + + + + + + + + + + + + #nombre# + + + #text# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #Comparte# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #id_comparte# + + + #integer# + + + ## + + + ## + + + + + + + + + + + + + + #id_auth# + + + #Authentication.id_authentication# + + + ## + + + ## + + + + + + + + + + + + + + #id_lista# + + + #Lista.id_lista# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #Item# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #id_item# + + + #integer# + + + ## + + + ## + + + + + + + + + + + + + + #nombre# + + + #text# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #Compra# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #id_compra# + + + #integer# + + + ## + + + ## + + + + + + + + + + + + + + #id_lista# + + + #lista.id_lista# + + + ## + + + ## + + + + + + + + + + + + + + #id_item# + + + #item.id_item# + + + ## + + + ## + + + + + + + + + + + + + + #cantidad# + + + #float# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + ## + + + ## + + + + + + + + + + + + + + + + + diff --git a/item/__init__.py b/item/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/item/admin.py b/item/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/item/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/item/apps.py b/item/apps.py new file mode 100644 index 0000000..f290658 --- /dev/null +++ b/item/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class ItemConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'item' diff --git a/item/migrations/__init__.py b/item/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/item/models.py b/item/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/item/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/item/tests.py b/item/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/item/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/item/views.py b/item/views.py new file mode 100644 index 0000000..91ea44a --- /dev/null +++ b/item/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/lista/__init__.py b/lista/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/lista/admin.py b/lista/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/lista/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/lista/apps.py b/lista/apps.py new file mode 100644 index 0000000..bb3c31f --- /dev/null +++ b/lista/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class ListaConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'lista' diff --git a/lista/migrations/__init__.py b/lista/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/lista/models.py b/lista/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/lista/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/lista/tests.py b/lista/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/lista/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/lista/views.py b/lista/views.py new file mode 100644 index 0000000..91ea44a --- /dev/null +++ b/lista/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/listaCompra/__init__.py b/listaCompra/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/listaCompra/asgi.py b/listaCompra/asgi.py new file mode 100644 index 0000000..df6e094 --- /dev/null +++ b/listaCompra/asgi.py @@ -0,0 +1,16 @@ +""" +ASGI config for listaCompra 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/4.1/howto/deployment/asgi/ +""" + +import os + +from django.core.asgi import get_asgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'listaCompra.settings') + +application = get_asgi_application() diff --git a/listaCompra/settings.py b/listaCompra/settings.py new file mode 100644 index 0000000..bd691b7 --- /dev/null +++ b/listaCompra/settings.py @@ -0,0 +1,117 @@ +from pathlib import Path +from decouple import config + +# 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/4.1/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = config('SECRET_KEY') +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = config('DEBUG', cast=bool) + +ALLOWED_HOSTS = [] + +# Application definition + +INSTALLED_APPS = [ + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', + # Mis apps + 'authentication.apps.AuthenticationConfig', + 'lista.apps.ListaConfig', + 'comparte.apps.ComparteConfig', + 'item.apps.ItemConfig', + 'compra.apps.CompraConfig', + # Terceras partes + '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', +] + +ROOT_URLCONF = 'listaCompra.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 = 'listaCompra.wsgi.application' + +# Database +# https://docs.djangoproject.com/en/4.1/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': BASE_DIR / 'db.sqlite3', + } +} + +# Password validation +# https://docs.djangoproject.com/en/4.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/4.1/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/4.1/howto/static-files/ + +STATIC_URL = 'static/' + +# Default primary key field type +# https://docs.djangoproject.com/en/4.1/ref/settings/#default-auto-field + +DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' diff --git a/listaCompra/urls.py b/listaCompra/urls.py new file mode 100644 index 0000000..714e4ca --- /dev/null +++ b/listaCompra/urls.py @@ -0,0 +1,7 @@ +from django.contrib import admin +from django.urls import path, include + +urlpatterns = [ + path('admin/', admin.site.urls), + path('auth/', include('authentication.urls')) +] diff --git a/listaCompra/wsgi.py b/listaCompra/wsgi.py new file mode 100644 index 0000000..dfe56ea --- /dev/null +++ b/listaCompra/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for listaCompra 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/4.1/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'listaCompra.settings') + +application = get_wsgi_application() diff --git a/manage.py b/manage.py new file mode 100755 index 0000000..9227517 --- /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', 'listaCompra.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/readmeImgs/bd.png b/readmeImgs/bd.png new file mode 100644 index 0000000000000000000000000000000000000000..66a5edecc7307ef280d72a3147d21c825ccf6092 GIT binary patch literal 23582 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%0A&Q2^&H(W%LN&Ul3=#T3d}^zPxhf zX+eR`{@_FXa7|-;6pbv{!*LVn!AYuL6^X_HJefEWps}&M-@e)62*(x7CX$kp;^-?J z?wAb9H3&kHLv*X%Bc{=`FZr!D~7 z!zWw1_>(z7Z2^ZY1SAbYju%U@$2*Q&ns>ej7WBV1+b zJ3mNX$ZqT1-}mOze`P-AMn-YLtKuo+XW`Ta&J-4I%IyYG5v!#2*r5K$F!lZ8`SAs1liam&UV_)DNf z`N%1p6@kNz;dkG(;reLQ1QaiHQ#3V+Sn&TWY2%EY(lx*pp}_V$us6C1I3oZ&>j8M` z<+4qS|5~lezYH#Tt!I~ccz6hO9|gAWf$g{dGJ=8=XU#e_W&4&bcXpTSD=7gB@Fh!^ z$^z$HPko!YMfN~(M8tFsa9|Zn8DErjmgWe7k3|86&oIJ@H5Mj!@j1*K63|64z#^3$ zwkVT@X-#9hL+b3