diff --git a/web/caFICteria_aaS/settings.py b/web/caFICteria_aaS/settings.py index bfdcce7..c99e306 100644 --- a/web/caFICteria_aaS/settings.py +++ b/web/caFICteria_aaS/settings.py @@ -35,6 +35,7 @@ ALLOWED_HOSTS = os.getenv('DJANGO_ALLOWED_HOSTS', "").split() INSTALLED_APPS = [ 'main', 'daily_menu', + 'lazaro_quotes', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', diff --git a/web/caFICteria_aaS/urls.py b/web/caFICteria_aaS/urls.py index 7ff7fa4..6325e30 100644 --- a/web/caFICteria_aaS/urls.py +++ b/web/caFICteria_aaS/urls.py @@ -21,5 +21,6 @@ from main import views as main_views urlpatterns = [ path('admin/', admin.site.urls), path('menu/', include("daily_menu.urls")), + path('quotes/', include("lazaro_quotes.urls")), path('', main_views.index, name="index"), ] diff --git a/web/lazaro_quotes/admin.py b/web/lazaro_quotes/admin.py index 8c38f3f..1661c7e 100644 --- a/web/lazaro_quotes/admin.py +++ b/web/lazaro_quotes/admin.py @@ -1,3 +1,7 @@ from django.contrib import admin +from .models import Suggester, Author, Quote, Suggestion -# Register your models here. +admin.site.register(Suggester) +admin.site.register(Author) +admin.site.register(Quote) +admin.site.register(Suggestion) diff --git a/web/lazaro_quotes/forms.py b/web/lazaro_quotes/forms.py new file mode 100644 index 0000000..13b4ee1 --- /dev/null +++ b/web/lazaro_quotes/forms.py @@ -0,0 +1,14 @@ +from django.forms import ModelForm, CharField, EmailField +from .models import Suggestion + + +class SuggestionForm(ModelForm): + class Meta: + model = Suggestion + fields = ["text", "context", "author_name"] + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + self.fields['suggester_name'] = CharField(label='Tu nombre') + self.fields['suggester_email'] = EmailField(label='Tu email') diff --git a/web/lazaro_quotes/migrations/0001_initial.py b/web/lazaro_quotes/migrations/0001_initial.py new file mode 100644 index 0000000..0bc555d --- /dev/null +++ b/web/lazaro_quotes/migrations/0001_initial.py @@ -0,0 +1,50 @@ +# Generated by Django 5.1.3 on 2024-12-02 22:49 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Author', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=254)), + ('slug', models.CharField(max_length=24)), + ], + ), + migrations.CreateModel( + name='Suggester', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=254)), + ('email', models.EmailField(max_length=254, unique=True)), + ], + ), + migrations.CreateModel( + name='Quote', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('text', models.TextField()), + ('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='lazaro_quotes.author')), + ('suggester', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='lazaro_quotes.suggester')), + ], + ), + migrations.CreateModel( + name='Suggestion', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('text', models.TextField()), + ('context', models.TextField(blank=True, null=True)), + ('author_name', models.CharField(max_length=254)), + ('suggester', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='lazaro_quotes.suggester')), + ], + ), + ] diff --git a/web/lazaro_quotes/models.py b/web/lazaro_quotes/models.py index 30b36d9..37089b9 100644 --- a/web/lazaro_quotes/models.py +++ b/web/lazaro_quotes/models.py @@ -1,13 +1,39 @@ from django.db import models +class Suggester(models.Model): + name = models.CharField(max_length=254) + email = models.EmailField(max_length=254, unique=True) + + def __str__(self): + return self.email + + +class Author(models.Model): + name = models.CharField(max_length=254) + slug = models.CharField(max_length=24) + + def __str__(self): + return self.name + + class Quote(models.Model): text = models.TextField() - quoted_name = models.CharField(null=True, blank=True, max_length=254) + author = models.ForeignKey( + Author, on_delete=models.CASCADE) suggester = models.ForeignKey( Suggester, on_delete=models.SET_NULL, null=True, blank=True) + def __str__(self): + return self.text -class Suggester(models.model): - name = models.CharField(null=True, blank=True, max_length=254) - email = models.CharField(null=True, blank=True, max_length=254) + +class Suggestion(models.Model): + text = models.TextField() + context = models.TextField(null=True, blank=True) + author_name = models.CharField(max_length=254) + suggester = models.ForeignKey( + Suggester, on_delete=models.CASCADE) + + def __str__(self): + return self.text diff --git a/web/lazaro_quotes/templates/lazaro_quotes/show_quote.html b/web/lazaro_quotes/templates/lazaro_quotes/show_quote.html new file mode 100644 index 0000000..dac0f12 --- /dev/null +++ b/web/lazaro_quotes/templates/lazaro_quotes/show_quote.html @@ -0,0 +1,17 @@ +{% extends 'main/base.html' %} + +{% block content %} +
+
+
+
+

"{{ quote.text }}"

+ +
+
+
+
+ +{% endblock %} \ No newline at end of file diff --git a/web/lazaro_quotes/urls.py b/web/lazaro_quotes/urls.py new file mode 100644 index 0000000..ab3b90f --- /dev/null +++ b/web/lazaro_quotes/urls.py @@ -0,0 +1,10 @@ +from django.urls import path + +from . import views + +app_name = "lazaro_quotes" + +urlpatterns = [ + path("", views.show_quote, name="show_quote"), + path("suggest", views.suggest_quote_form, name="suggest_quote_form") +] diff --git a/web/lazaro_quotes/views.py b/web/lazaro_quotes/views.py index 91ea44a..b04edbd 100644 --- a/web/lazaro_quotes/views.py +++ b/web/lazaro_quotes/views.py @@ -1,3 +1,32 @@ -from django.shortcuts import render +from django.shortcuts import render, redirect +from django.contrib import messages -# Create your views here. +from .models import Quote, Suggester +from .forms import SuggestionForm + + +def show_quote(request): + quote = Quote.objects.order_by('?').first() or None + + return render(request, 'lazaro_quotes/show_quote.html', {"quote": quote}) + + +def suggest_quote_form(request): + if request.method == 'POST': + form = SuggestionForm(request.POST) + + if form.is_valid(): + suggester, created = Suggester.objects.get_or_create(defaults={"name": form.cleaned_data['suggester_name']}, + email=form.cleaned_data['suggester_email']) + + suggestion = form.save(commit=False) + suggestion.suggester = suggester + suggestion.save() + + messages.success( + request, "Tu sugestión se ha enviado correctamente") + return redirect('lazaro_quotes:show_quote') + else: + form = SuggestionForm() + + return render(request, 'main/show_form.html', {'form_header': '¡Mándanos alguna frase celebre/graciosa que hayas escuchado en la FIC!', 'form': form}) diff --git a/web/main/templates/main/_items/navbar.html b/web/main/templates/main/_items/navbar.html index 9409997..9c12c19 100644 --- a/web/main/templates/main/_items/navbar.html +++ b/web/main/templates/main/_items/navbar.html @@ -59,8 +59,11 @@ aria-haspopup="true">Lázaro-aaS diff --git a/web/main/templates/main/show_form.html b/web/main/templates/main/show_form.html index 3daefab..d2e5452 100644 --- a/web/main/templates/main/show_form.html +++ b/web/main/templates/main/show_form.html @@ -3,7 +3,7 @@ {% load static %} {% block content %} -
+

{{ form_header }}

{% csrf_token %} diff --git a/web/supervisord.conf b/web/supervisord.conf index a52ed61..022a400 100644 --- a/web/supervisord.conf +++ b/web/supervisord.conf @@ -12,7 +12,7 @@ stdout_logfile_maxbytes=0 redirect_stderr=true [program:gunicorn] -command=gunicorn --preload --bind 0.0.0.0:8000 caFICteria_aaS.wsgi +command=/bin/sh -c "python3 manage.py migrate --run-syncdb && gunicorn --preload --bind 0.0.0.0:8000 caFICteria_aaS.wsgi" directory=/app autostart=true autorestart=true