Add basic quotes functionality

This commit is contained in:
Pedro Rey Anca 2024-12-03 00:11:42 +01:00
parent f8533fc819
commit b9775ca672
Signed by: peprolinbot
GPG key ID: 053EA6E00116533A
12 changed files with 166 additions and 11 deletions

View file

@ -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',

View file

@ -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"),
]

View file

@ -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)

View file

@ -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')

View file

@ -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')),
],
),
]

View file

@ -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

View file

@ -0,0 +1,17 @@
{% extends 'main/base.html' %}
{% block content %}
<div class="mt-5 container justify-content-center d-flex">
<div class="card text-center" style="width: 80rem;">
<div class="card-body">
<blockquote class="blockquote mb-0">
<h1>"{{ quote.text }}"</h1>
<footer class="blockquote-footer">
<h2>{{ quote.author.name }}</h2>
</footer>
</blockquote>
</div>
</div>
</div>
{% endblock %}

10
web/lazaro_quotes/urls.py Normal file
View file

@ -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")
]

View file

@ -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})

View file

@ -59,8 +59,11 @@
aria-haspopup="true">Lázaro-aaS
</a>
<ul class="dropdown-menu">
<li><a class="dropdown-item nav-link" href="">Ver frases</a></li>
<li><a class="dropdown-item nav-link" href="">Sugerir frases</a></li>
<li><a class="dropdown-item nav-link" href="{% url 'lazaro_quotes:show_quote' %}">Frase
aleatoria</a></li>
<li><a class="dropdown-item nav-link"
href="{% url 'lazaro_quotes:suggest_quote_form' %}">Sugerir
frases</a></li>
</ul>
</div>

View file

@ -3,7 +3,7 @@
{% load static %}
{% block content %}
<div class="container col-md-6 mt-5">
<div class="container col-md-6 my-5">
<h1 class="text-center">{{ form_header }}</h1>
<form action="" method="post">
{% csrf_token %}

View file

@ -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