Skip to content

Commit

Permalink
Merge pull request #76 from jtweeder/dev
Browse files Browse the repository at this point in the history
Launch of blog post feature
  • Loading branch information
jtweeder authored Jul 13, 2023
2 parents 7609903 + 7cc99ba commit 6604218
Show file tree
Hide file tree
Showing 12 changed files with 276 additions and 26 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -111,3 +111,4 @@ venv.bak/
manage.py

dev_static/
meals/migrations/__pycache__/__init__.cpython-310.pyc
11 changes: 11 additions & 0 deletions stewpot/admin.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,14 @@
from django.contrib import admin
from .models import meal_posting, share_meal

# Register your models here.
class meal_postingAdmin(admin.ModelAdmin):
class meta:
model = meal_posting

class share_mealAdmin(admin.ModelAdmin):
class meta:
model = share_meal

admin.site.register(meal_posting, meal_postingAdmin)
admin.site.register(share_meal, share_mealAdmin)
30 changes: 30 additions & 0 deletions stewpot/migrations/0002_meal_posting_share_meal_posting.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# Generated by Django 4.0.1 on 2023-07-09 21:37

from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('stewpot', '0001_initial'),
]

operations = [
migrations.CreateModel(
name='meal_posting',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(max_length=255)),
('text', models.TextField()),
('creator', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
),
migrations.AddField(
model_name='share_meal',
name='posting',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='stewpot.meal_posting'),
),
]
20 changes: 20 additions & 0 deletions stewpot/migrations/0003_meal_posting_created_on.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Generated by Django 4.0.1 on 2023-07-10 03:07

from django.db import migrations, models
import django.utils.timezone


class Migration(migrations.Migration):

dependencies = [
('stewpot', '0002_meal_posting_share_meal_posting'),
]

operations = [
migrations.AddField(
model_name='meal_posting',
name='created_on',
field=models.DateTimeField(auto_now_add=True, default=django.utils.timezone.now),
preserve_default=False,
),
]
14 changes: 14 additions & 0 deletions stewpot/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,23 @@
from django.contrib.auth.models import User


class meal_posting(models.Model):
title = models.CharField(max_length=255)
creator = models.ForeignKey(User, on_delete=models.CASCADE)
text = models.TextField()
created_on = models.DateTimeField(auto_now_add=True)

def __str__(self):
return self.title


class share_meal(models.Model):
title = models.CharField(max_length=255)
creator = models.ForeignKey(User, on_delete=models.CASCADE)
text = models.TextField()
meal = models.ForeignKey(mstr_recipe, on_delete=models.CASCADE)
created_on = models.DateTimeField(auto_now_add=True)
posting = models.ForeignKey(meal_posting, null=True, on_delete=models.CASCADE)

def __str__(self):
return self.title
53 changes: 38 additions & 15 deletions stewpot/test_stewpot.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,28 +8,39 @@
class share_meal(TestCase):
def setUp(self):
self.tst_user = User.objects.create_user('john',
'[email protected]',
'johnpassword')
'[email protected]',
'johnpassword')
self.tst_recipe = mstr_recipe.objects.create(meal_id=uuid.uuid1(),
title='TestTitle2',
rec_url="https://www.mealcurator.com",
vegan=False,
vegetarian=False,
meal_time='bk',
dish_type='sp',
cooking_method='st',
cooking_time='20',
times_selected=0,
sumreview=0,
numreview=0,
found_words="test"
)
title='TestTitle2',
rec_url="https://www.mealcurator.com",
vegan=False,
vegetarian=False,
meal_time='bk',
dish_type='sp',
cooking_method='st',
cooking_time='20',
times_selected=0,
sumreview=0,
numreview=0,
found_words="test"
)
self.share_meal = (models.share_meal
.objects.create(title='ShareTest',
creator=self.tst_user,
text='shared meal test',
meal=self.tst_recipe)
)
self.meal_posting = (models.meal_posting
.objects.create(title='Test Posting',
creator=self.tst_user,
text='A Test Posting Post')
)
self.share_meal_posting = (models.share_meal
.objects.create(title='PostingTest',
creator=self.tst_user,
text='Posting Meal Test',
meal=self.tst_recipe)
)

self.factory = RequestFactory()

Expand All @@ -41,3 +52,15 @@ def test_share_start(self):
request.user = self.tst_user
response = views.start_share(request, self.tst_recipe.meal_id)
self.assertEqual(response.status_code, 200)

def test_posting(self):
request = self.factory.get('/share/post')
request.user = self.tst_user
response = views.view_share(request, self.meal_posting.id)
self.assertEqual(response.status_code, 200)

def test_blog(self):
request = self.factory.get('/share/post')
request.user = self.tst_user
response = views.home_postings(request)
self.assertEqual(response.status_code, 200)
3 changes: 0 additions & 3 deletions stewpot/tests.py

This file was deleted.

3 changes: 3 additions & 0 deletions stewpot/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,7 @@
path('save/<str:meal_id>', share_views.start_share, name='start-shared'),
path('', share_views.save_share, name='save-shared'),
path('view/<int:share_id>', share_views.view_share, name='view-shared'),
path('post/<int:post_id>', share_views.view_posting, name='view-posting'),
path('post/', share_views.home_postings, name='home-postings'),

]
44 changes: 36 additions & 8 deletions stewpot/views.py
Original file line number Diff line number Diff line change
@@ -1,29 +1,29 @@
from django.shortcuts import render, redirect
from django.contrib.auth.decorators import login_required
from meals.models import mstr_recipe
from stewpot.models import share_meal
from stewpot.models import share_meal, meal_posting
from mealcurator.helperfuncs import check_blank

# TODO: Let edits happen for things people shared
# TODO: Let someone add a shared recipe to a list/make a list
# TODO: Let Admins make multiple recipes and make a blogpost about them


# Landing page for capturing title and text from user
@login_required
def start_share(request, meal_id):
"""Landing page for capturing title and text from user"""
meal = mstr_recipe.objects.get(meal_id=meal_id)
template = 'stewpot/share.html'
context = {'meal': meal, 'start': True}
return render(request, template, context)


# Create share_meal and redirect to view of it
@login_required
def save_share(request):
"""Create share_meal and redirect to view of it"""
if request.method == 'POST':
shared_title = check_blank(request.POST.get('shared_title'), 'A shared recipe from mealCurator')
shared_text = check_blank(request.POST.get('shared_text'), 'I found this on mealCurator and wanted to share it with you')
shared_title = check_blank(request.POST.get('shared_title'),
'A shared recipe from mealCurator')
shared_text = check_blank(request.POST.get('shared_text'),
'I found this on mealCurator and wanted to share it with you')
shared_meal = mstr_recipe.objects.get(meal_id=request.POST.get('shared_meal'))

shared = share_meal.objects.create(
Expand All @@ -34,7 +34,6 @@ def save_share(request):
)
return redirect('view-shared', shared.id)


# View a shared meal
def view_share(request, share_id):
shared = (share_meal.objects.values('id',
Expand All @@ -56,3 +55,32 @@ def view_share(request, share_id):
}
template = 'stewpot/share.html'
return render(request, template, context)


def view_posting(request, post_id):
posting = meal_posting.objects.get(id=post_id)
shared = (share_meal.objects.values('id',
'title',
'text',
'meal_id',
'meal__title',
'meal__vegan',
'meal__vegetarian',
'meal__meal_time',
'meal__cooking_time',
'meal__dish_type',
'meal__cooking_method',
'meal__protein_type',
'meal__rec_url')
.filter(posting=posting))

context = {'pp': posting,
'shared_meals': shared}
template = 'stewpot/meal_post.html'
return render(request, template, context)

def home_postings(request):
posts = meal_posting.objects.all().order_by('created_on')
context = {'posts': posts}
template = 'stewpot/postings.html'
return render(request, template, context)
1 change: 1 addition & 0 deletions templates/base.html
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,7 @@
{% block botnavbar %}
<div class="navbar">
<ul class="navlist">
<li><a class="button" href="{% url 'home-postings'%}">Recipe Blog</a></li>
<li><a class="button" href="{% url 'about' %}">About</a></li>
<li><a class="button" href="{% url 'howto' %}">How-To</a></li>
<li><a class="button" href="{% url 'change_log' %}">Change-Log</a></li>
Expand Down
94 changes: 94 additions & 0 deletions templates/stewpot/meal_post.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
{% extends "base.html" %}
{% load static %}
{% load cooks_extras %}


{% block css_style %}

#rec {
margin: auto;
padding: 10px
}

{% endblock css_style %}

{% block page_content %}
<div class="content">


<h1>{{pp.title}}</h1>
<p>{{pp.text}}</p>

{% for meal in shared_meals %}

<h2 class="mealTitle">{{meal.title}}</h2>

<div id="rec" class="recCard">
<table>
<th colspan=2><a href="{{ meal.meal__rec_url }}", target="_blank">{{ meal.meal__title }}</a></th>
<tr><td><b>Vegan:</b> {{ meal.meal__vegan|yesno:"Yes,No" }}</td><td><b>Vegetarian:</b> {{ meal.meal__vegetarian|yesno:"Yes,No" }}</td></tr>
<tr><td class="leftTd">Meal Time:</td>
<td class="rightTd">
{% if meal.meal__meal_time == 'bk' %} Breakfast
{% elif meal.meal__meal_time == 'lu' %} Lunch
{% elif meal.meal__meal_time == 'di' %} Dinner
{% elif meal.meal__meal_time == 'sd' %} Side Dish
{% elif meal.meal__meal_time == 'de' %} Dessert
{% elif meal.meal__meal_time == 'sn' %} Snack
{% endif %}
</td></tr>
<tr><td class="leftTd">Cooking Time:</td>
<td class="rightTd">
{% if meal.meal__cooking_time == '20' %} Less than 20 Minutes
{% elif meal.meal__cooking_time == '40' %} 20 to 40 Minutes
{% elif meal.meal__cooking_time == '60' %} 40 to 60 Minutes
{% elif meal.meal__cooking_time == '61' %} Over 60 Minutes
{% endif %}
</td></tr>
<tr><td class="leftTd">Method:</td>
<td class="rightTd">
{% if meal.meal__cooking_method == 'st' %} Stove Top
{% elif meal.meal__cooking_method == 'mi' %} Microwave
{% elif meal.meal__cooking_method == 'bl' %} Blender
{% elif meal.meal__cooking_method == 'gr' %} Grill
{% elif meal.meal__cooking_method == 'ov' %} Oven
{% elif meal.meal__cooking_method == 'pr' %} Pressure Cooker
{% elif meal.meal__cooking_method == 'sc' %} Slow Cooker
{% elif meal.meal__cooking_method == 'af' %} Air Fryer
{% elif meal.meal__cooking_method == 'ra' %} Raw/Uncooked
{% endif %}
</td></tr>
<tr><td class="leftTd">Dish Type:</td>
<td class="rightTd">
{% if meal.meal__dish_type == 'sp' %} Soup
{% elif meal.meal__dish_type == 'bk' %} Baked Dish
{% elif meal.meal__dish_type == 'pa' %} Pasta
{% elif meal.meal__dish_type == 'cu' %} Curry
{% elif meal.meal__dish_type == 'ca' %} Casserole
{% elif meal.meal__dish_type == 'st' %} Stew
{% elif meal.meal__dish_type == 'sa' %} Salad
{% elif meal.meal__dish_type == 'lt' %} Light Dish
{% elif meal.meal__dish_type == 'sm' %} Smoothie
{% elif meal.meal__dish_type == 'na' %} Other
{% endif %}
</td></tr>
<tr><td class="leftTd">Protein Type:</td>
<td class="rightTd">
{% if meal.meal__protein_type == 'be' %} Beef
{% elif meal.meal__protein_type == 'ch' %} Chicken
{% elif meal.meal__protein_type == 'pb' %} Plant Based
{% elif meal.meal__protein_type == 'se' %} Fish / Shellfish
{% elif meal.meal__protein_type == 'pk' %} Pork
{% elif meal.meal__protein_type == 'na' %} None
{% elif meal.meal__protein_type == 'ot' %} Other
{% endif %}
</td></tr>
</table>
</div>
<p>{{meal.text}}</p>

{% endfor %}

</div>
{% endblock %}

28 changes: 28 additions & 0 deletions templates/stewpot/postings.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
{% extends "base.html" %}
{% load static %}
{% load cooks_extras %}


{% block css_style %}


{% endblock css_style %}

{% block page_content %}
<div class="content">

<h2>A collection of blog articles about various recipes availible on mealCurator</h2>

{% for post in posts %}

<h3 class="mealTitle">
<a href="{% url 'view-posting' post.id %}">
{{post.title}}</a>
</h3>
<p>{{post.text}}</p>

{% endfor %}

</div>
{% endblock %}

0 comments on commit 6604218

Please sign in to comment.