Browse Source

Api de vehículos

politica
Celestino Rey 10 months ago
parent
commit
23e510f7a7
17 changed files with 5 additions and 270 deletions
  1. +1
    -1
      ReyMotaAppsDj/K8S/Makefile
  2. +2
    -2
      ReyMotaAppsDj/K8S/env-prod-configmap.yaml
  3. +0
    -5
      ReyMotaAppsDj/K8S/reymota-deployment.yaml
  4. +0
    -16
      ReyMotaAppsDj/K8S/reymota-prod-persistentvolumeclaim.yaml
  5. +0
    -0
      ReyMotaAppsDj/reymota/libros/__init__.py
  6. +0
    -8
      ReyMotaAppsDj/reymota/libros/admin.py
  7. +0
    -6
      ReyMotaAppsDj/reymota/libros/apps.py
  8. +0
    -30
      ReyMotaAppsDj/reymota/libros/forms.py
  9. +0
    -38
      ReyMotaAppsDj/reymota/libros/migrations/0001_initial.py
  10. +0
    -0
      ReyMotaAppsDj/reymota/libros/migrations/__init__.py
  11. +0
    -32
      ReyMotaAppsDj/reymota/libros/models.py
  12. +0
    -3
      ReyMotaAppsDj/reymota/libros/tests.py
  13. +0
    -21
      ReyMotaAppsDj/reymota/libros/urls.py
  14. +0
    -103
      ReyMotaAppsDj/reymota/libros/views.py
  15. +0
    -2
      ReyMotaAppsDj/reymota/reymota/urls.py
  16. +0
    -1
      ReyMotaAppsDj/reymota/templates/_cabecera.html
  17. +2
    -2
      ReyMotaAppsDj/reymota/templates/base.html

+ 1
- 1
ReyMotaAppsDj/K8S/Makefile View File

@ -1,7 +1,7 @@
export ARQUITECTURA := $(shell lscpu |grep itectur | tr -d ' '| cut -f2 -d':') export ARQUITECTURA := $(shell lscpu |grep itectur | tr -d ' '| cut -f2 -d':')
#export REGISTRY=registry.cube.local #export REGISTRY=registry.cube.local
export REGISTRY=registry.reymota.es export REGISTRY=registry.reymota.es
export IMG_VERSION = 0.30
export IMG_VERSION = 0.33
export IMG_NGINX_VERSION = 1.0 export IMG_NGINX_VERSION = 1.0
# limpia todo # limpia todo


+ 2
- 2
ReyMotaAppsDj/K8S/env-prod-configmap.yaml View File

@ -2,8 +2,8 @@ apiVersion: v1
data: data:
DEBUG: "False" DEBUG: "False"
ENTORNO: "Producción" ENTORNO: "Producción"
DJANGO_ALLOWED_HOSTS: "reymota.es vmcluster k8s-server localhost 127.0.0.1 [::1]"
CSRF_TRUSTED_ORIGINS: "https://reymota.es http://vmcluster"
DJANGO_ALLOWED_HOSTS: "reymota.rancher.my.org reymota.es vmcluster k8s-server localhost 127.0.0.1 [::1]"
CSRF_TRUSTED_ORIGINS: "https://reymota.es http://vmcluster http://reymota.rancher.my.org/ "
SECRET_KEY: change_me SECRET_KEY: change_me
SQL_DATABASE: reymota SQL_DATABASE: reymota
SQL_ENGINE: django.db.backends.postgresql SQL_ENGINE: django.db.backends.postgresql


+ 0
- 5
ReyMotaAppsDj/K8S/reymota-deployment.yaml View File

@ -112,8 +112,6 @@ spec:
name: reymota-lyrics-migrations name: reymota-lyrics-migrations
- mountPath: /app/reymota/repostajes/migrations - mountPath: /app/reymota/repostajes/migrations
name: reymota-repostajes-migrations name: reymota-repostajes-migrations
- mountPath: /app/reymota/libros/migrations
name: reymota-libros-migrations
- mountPath: /app/reymota/reymotausers/migrations - mountPath: /app/reymota/reymotausers/migrations
name: reymota-reymotausers-migrations name: reymota-reymotausers-migrations
@ -132,9 +130,6 @@ spec:
- name: reymota-repostajes-migrations - name: reymota-repostajes-migrations
persistentVolumeClaim: persistentVolumeClaim:
claimName: reymota-repostajes-migrations claimName: reymota-repostajes-migrations
- name: reymota-libros-migrations
persistentVolumeClaim:
claimName: reymota-libros-migrations
- name: reymota-reymotausers-migrations - name: reymota-reymotausers-migrations
persistentVolumeClaim: persistentVolumeClaim:
claimName: reymota-reymotausers-migrations claimName: reymota-reymotausers-migrations


+ 0
- 16
ReyMotaAppsDj/K8S/reymota-prod-persistentvolumeclaim.yaml View File

@ -16,22 +16,6 @@ status: {}
--- ---
apiVersion: v1 apiVersion: v1
kind: PersistentVolumeClaim kind: PersistentVolumeClaim
metadata:
creationTimestamp: null
labels:
io.kompose.service: reymota-libros-migrations
name: reymota-libros-migrations
namespace: reymota
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 51Mi
status: {}
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata: metadata:
creationTimestamp: null creationTimestamp: null
labels: labels:


+ 0
- 0
ReyMotaAppsDj/reymota/libros/__init__.py View File


+ 0
- 8
ReyMotaAppsDj/reymota/libros/admin.py View File

@ -1,8 +0,0 @@
from django.contrib import admin
# Register your models here.
from .models import Autor, Libro
admin.site.register(Autor)
admin.site.register(Libro)

+ 0
- 6
ReyMotaAppsDj/reymota/libros/apps.py View File

@ -1,6 +0,0 @@
from django.apps import AppConfig
class LibrosConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'libros'

+ 0
- 30
ReyMotaAppsDj/reymota/libros/forms.py View File

@ -1,30 +0,0 @@
from django import forms
from .models import Autor, Libro
class AutorForm(forms.ModelForm):
class Meta:
model = Autor
fields = ['nombre', 'biografia', 'foto']
nombre = forms.CharField(
widget=forms.TextInput(attrs={'class': 'form-control'}))
biografia = forms.CharField(
widget=forms.TextInput(attrs={'class': 'form-control'}))
class LibroForm(forms.ModelForm):
class Meta:
model = Libro
fields = ['titulo', 'autor', 'fecha_publicacion', 'descripcion',
'archivo', 'portada']
titulo = forms.CharField(
widget=forms.TextInput(attrs={'class': 'form-control'}))
descripcion = forms.CharField(
widget=forms.TextInput(attrs={'class': 'form-control'}))
autor = forms.ModelChoiceField(
queryset=Autor.objects.all(),
widget=forms.Select(attrs={'class': 'form-control'}))

+ 0
- 38
ReyMotaAppsDj/reymota/libros/migrations/0001_initial.py View File

@ -1,38 +0,0 @@
# Generated by Django 4.2 on 2024-09-09 14:52
import django.core.validators
from django.db import migrations, models
import django.db.models.deletion
import libros.models
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='Autor',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('nombre', models.CharField(max_length=200)),
('biografia', models.TextField(blank=True, null=True)),
('foto', models.ImageField(blank=True, null=True, upload_to='autores/')),
],
),
migrations.CreateModel(
name='Libro',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('titulo', models.CharField(max_length=200)),
('fecha_publicacion', models.PositiveBigIntegerField(default=2024, validators=[django.core.validators.MinValueValidator(1984), libros.models.max_value_current_year])),
('descripcion', models.TextField(blank=True, null=True)),
('archivo', models.FileField(upload_to='libros/')),
('portada', models.ImageField(blank=True, null=True, upload_to='portadas/')),
('autor', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='libros.autor')),
],
),
]

+ 0
- 0
ReyMotaAppsDj/reymota/libros/migrations/__init__.py View File


+ 0
- 32
ReyMotaAppsDj/reymota/libros/models.py View File

@ -1,32 +0,0 @@
from django.db import models
import datetime
from django.core.validators import MaxValueValidator, MinValueValidator
def current_year():
return datetime.date.today().year
def max_value_current_year(value):
return MaxValueValidator(current_year())(value)
class Autor(models.Model):
nombre = models.CharField(max_length=200)
biografia = models.TextField(blank=True, null=True)
foto = models.ImageField(upload_to='autores/', blank=True, null=True) # Nuevo campo
def __str__(self):
return self.nombre
class Libro(models.Model):
titulo = models.CharField(max_length=200)
autor = models.ForeignKey(Autor, on_delete=models.CASCADE)
fecha_publicacion = models.PositiveBigIntegerField(default=current_year(), validators=[MinValueValidator(1984), max_value_current_year])
descripcion = models.TextField(blank=True, null=True)
archivo = models.FileField(upload_to='libros/')
portada = models.ImageField(upload_to='portadas/', blank=True, null=True) # Nuevo campo
def __str__(self):
return self.titulo

+ 0
- 3
ReyMotaAppsDj/reymota/libros/tests.py View File

@ -1,3 +0,0 @@
from django.test import TestCase
# Create your tests here.

+ 0
- 21
ReyMotaAppsDj/reymota/libros/urls.py View File

@ -1,21 +0,0 @@
from django.urls import path
from . import views
app_name = 'libros'
urlpatterns = [
path('', views.principal, name='principal'),
path('autores/', views.lista_autores, name='lista_autores'),
path('autores/nuevo/', views.nuevo_autor, name='nuevo_autor'),
path('autores/<int:autor_id>/', views.detalle_autor, name='detalle_autor'),
path('autores/<int:autor_id>/editar/', views.editar_autor, name='editar_autor'),
path('autores/<int:autor_id>/eliminar/', views.eliminar_autor, name='eliminar_autor'),
path('libros/', views.lista_libros, name='lista_libros'),
path('libros/nuevo/', views.nuevo_libro, name='nuevo_libro'),
path('libros/<int:libro_id>/', views.detalle_libro, name='detalle_libro'),
path('libros/<int:libro_id>/editar/', views.editar_libro, name='editar_libro'),
path('libros/<int:libro_id>/eliminar/', views.eliminar_libro, name='eliminar_libro'),
]

+ 0
- 103
ReyMotaAppsDj/reymota/libros/views.py View File

@ -1,103 +0,0 @@
from django.shortcuts import render, get_object_or_404, redirect
from django.contrib.auth.decorators import login_required
from .models import Autor, Libro
from .forms import AutorForm, LibroForm
@login_required
def principal(request):
return render(request, 'libros/index.html')
# Vistas para los autores
@login_required
def lista_autores(request):
autores = Autor.objects.all()
return render(request, 'libros/lista_autores.html', {'autores': autores})
@login_required
def detalle_autor(request, autor_id):
autor = get_object_or_404(Autor, pk=autor_id)
libros = Libro.objects.filter(autor=autor_id)
return render(request, 'libros/detalle_autor.html', {'autor': autor, 'libros': libros})
@login_required
def nuevo_autor(request):
if request.method == 'POST':
form = AutorForm(request.POST, request.FILES)
if form.is_valid():
form.save()
return redirect('libros:lista_autores')
else:
form = AutorForm()
return render(request, 'libros/form_autor.html', {'form': form})
@login_required
def editar_autor(request, autor_id):
autor = get_object_or_404(Autor, pk=autor_id)
if request.method == 'POST':
form = AutorForm(request.POST, request.FILES, instance=autor)
if form.is_valid():
form.save()
return redirect('libros:lista_autores')
else:
form = AutorForm(instance=autor)
return render(request, 'libros/form_autor.html', {'form': form})
@login_required
def eliminar_autor(request, autor_id):
autor = get_object_or_404(Autor, pk=autor_id)
autor.delete()
return redirect('libros:lista_autores')
# Vistas para los libros
@login_required
def lista_libros(request):
libros = Libro.objects.all()
return render(request, 'libros/lista_libros.html', {'libros': libros})
@login_required
def detalle_libro(request, libro_id):
libro = get_object_or_404(Libro, pk=libro_id)
return render(request, 'libros/detalle_libro.html', {'libro': libro})
@login_required
def nuevo_libro(request):
if request.method == 'POST':
form = LibroForm(request.POST, request.FILES)
if form.is_valid():
form.save()
return redirect('libros:lista_libros')
else:
form = LibroForm()
return render(request, 'libros/form_libro.html', {'form': form})
@login_required
def editar_libro(request, libro_id):
libro = get_object_or_404(Libro, pk=libro_id)
if request.method == 'POST':
form = LibroForm(request.POST, request.FILES, instance=libro)
if form.is_valid():
form.save()
return redirect('libros:lista_libros')
else:
form = LibroForm(instance=libro)
return render(request, 'libros/form_libro.html', {'form': form})
@login_required
def eliminar_libro(request, libro_id):
libro = get_object_or_404(Libro, pk=libro_id)
libro.delete()
return redirect('libros:lista_libros')

+ 0
- 2
ReyMotaAppsDj/reymota/reymota/urls.py View File

@ -25,8 +25,6 @@ from . import views
urlpatterns = [ urlpatterns = [
path('obreros/', admin.site.urls), path('obreros/', admin.site.urls),
path('libros/', include('libros.urls')),
path('repostajes/', include('repostajes.urls')), path('repostajes/', include('repostajes.urls')),
path('lyrics/', include('lyrics.urls')), path('lyrics/', include('lyrics.urls')),


+ 0
- 1
ReyMotaAppsDj/reymota/templates/_cabecera.html View File

@ -108,7 +108,6 @@
</a><!--//nav-link--> </a><!--//nav-link-->
<div id="submenu-1" class="collapse submenu submenu-1" data-bs-parent="#menu-accordion"> <div id="submenu-1" class="collapse submenu submenu-1" data-bs-parent="#menu-accordion">
<ul class="submenu-list list-unstyled"> <ul class="submenu-list list-unstyled">
<li class="submenu-item"><a class="submenu-link" href="{% url 'libros:principal' %}">Libros</a></li>
<li class="submenu-item"><a class="submenu-link" href="{% url 'repostajes:principal' %}">Vehículos</a></li> <li class="submenu-item"><a class="submenu-link" href="{% url 'repostajes:principal' %}">Vehículos</a></li>
<li class="submenu-item"><a class="submenu-link" href="{% url 'lyrics:principal' %}">Letras</a></li> <li class="submenu-item"><a class="submenu-link" href="{% url 'lyrics:principal' %}">Letras</a></li>
</ul> </ul>


+ 2
- 2
ReyMotaAppsDj/reymota/templates/base.html View File

@ -114,7 +114,7 @@
<li class="nav-item has-submenu"> <li class="nav-item has-submenu">
<!--//Bootstrap Icons: https://icons.getbootstrap.com/ --> <!--//Bootstrap Icons: https://icons.getbootstrap.com/ -->
<a class="nav-link submenu-toggle" href="#" data-bs-toggle="collapse" data-bs-target="#submenu-1" aria-expanded="false" aria-controls="submenu-1">
<a class="nav-link submenu-toggle" href="#" data-bs-toggle="collapse" data-bs-target="#submenu-2" aria-expanded="false" aria-controls="submenu-2">
<span class="nav-icon"> <span class="nav-icon">
<!--//Bootstrap Icons: https://icons.getbootstrap.com/ --> <!--//Bootstrap Icons: https://icons.getbootstrap.com/ -->
<svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-files" fill="currentColor" xmlns="http://www.w3.org/2000/svg"> <svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-files" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
@ -129,7 +129,7 @@
</svg> </svg>
</span><!--//submenu-arrow--> </span><!--//submenu-arrow-->
</a><!--//nav-link--> </a><!--//nav-link-->
<div id="submenu-1" class="collapse submenu submenu-1" data-bs-parent="#menu-accordion">
<div id="submenu-2" class="collapse submenu submenu-2" data-bs-parent="#menu-accordion">
<ul class="submenu-list list-unstyled"> <ul class="submenu-list list-unstyled">
<li class="submenu-item"><a class="submenu-link" href="https://navidrome.reymota.es" target="_blank">Navidrome</a></li> <li class="submenu-item"><a class="submenu-link" href="https://navidrome.reymota.es" target="_blank">Navidrome</a></li>
<li class="submenu-item"><a class="submenu-link" href="https://firefly.reymota.es" target="_blank">Gestion economica</a></li> <li class="submenu-item"><a class="submenu-link" href="https://firefly.reymota.es" target="_blank">Gestion economica</a></li>


Loading…
Cancel
Save