Add basic quotes functionality
This commit is contained in:
parent
f8533fc819
commit
b9775ca672
|
@ -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',
|
||||
|
|
|
@ -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"),
|
||||
]
|
||||
|
|
|
@ -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)
|
||||
|
|
14
web/lazaro_quotes/forms.py
Normal file
14
web/lazaro_quotes/forms.py
Normal 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')
|
50
web/lazaro_quotes/migrations/0001_initial.py
Normal file
50
web/lazaro_quotes/migrations/0001_initial.py
Normal 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')),
|
||||
],
|
||||
),
|
||||
]
|
|
@ -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
|
||||
|
|
17
web/lazaro_quotes/templates/lazaro_quotes/show_quote.html
Normal file
17
web/lazaro_quotes/templates/lazaro_quotes/show_quote.html
Normal 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
10
web/lazaro_quotes/urls.py
Normal 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")
|
||||
]
|
|
@ -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})
|
||||
|
|
|
@ -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>
|
||||
|
||||
|
|
|
@ -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 %}
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue