diff --git a/src/tjts5901/models.py b/src/tjts5901/models.py index a0ae09d95de64e56d5ed35671e57fab37555ac43..f9057d7d72509014b5f369cbc540f4bbde3349db 100644 --- a/src/tjts5901/models.py +++ b/src/tjts5901/models.py @@ -1,3 +1,6 @@ + +from PIL import Image +from io import BytesIO from datetime import datetime from .db import db @@ -70,6 +73,17 @@ class Item(db.Document): created_at = DateTimeField(required=True, default=datetime.utcnow) - closes_at = DateTimeField() + closes_at = DateTimeField(required=True) image = FileField() + + def save(self, *args, **kwargs): + # Resize image before saving + if self.image: + image = Image.open(BytesIO(self.image.read())) + image.thumbnail((200, 200)) + output = BytesIO() + image.save(output, format='JPEG') + self.image.replace(output.getvalue(), content_type='image/jpeg') + + super().save(*args, **kwargs) \ No newline at end of file diff --git a/src/tjts5901/templates/listBid.html b/src/tjts5901/templates/listBid.html index 6fd31c6197ebc40940c1ea59d5eebd4c8dcc062d..824468284a19b168f2680ec48c370ab12cb94cd5 100644 --- a/src/tjts5901/templates/listBid.html +++ b/src/tjts5901/templates/listBid.html @@ -31,7 +31,7 @@ <div class="list-group container"> {%for item in items %} <div class="d-flex w-100 justify-content-between mb-4"> - <img class=" col-md-2 col-xs-2" src="${path}"{{ item.image }} alt="Image" /> + <img src="data:image/png;base64,{{ item.image_base64 }}"> <a href="#" class="list-group-item list-group-item-action" aria-current="true"> <div class="d-flex w-100 justify-content-between"> <h5 class="mb-1">{{ item.title }}</h5> diff --git a/src/tjts5901/views.py b/src/tjts5901/views.py index c599672cafe13411a3e3f42b042743a121df3591..16061a24c50b46a9107802b9a2ea9bc626197fc0 100644 --- a/src/tjts5901/views.py +++ b/src/tjts5901/views.py @@ -3,6 +3,7 @@ Basic views for Application =========================== """ +import base64 import random from datetime import datetime, timedelta from flask import Blueprint, flash, redirect, render_template, request, url_for @@ -76,7 +77,6 @@ def add_item(): user.email = "test" + ran_int + "@gmail.com" user.password = "placeholder" user.save() - try: item = Item( title=nItem, @@ -88,9 +88,10 @@ def add_item(): ) item.save() + except Exception as exc: error = f"Error creating item: {exc!s}" - print('error') + print('error:', exc) else: return redirect(url_for('views.list_bid')) @@ -109,8 +110,8 @@ def list_bid(): """ # for test reasons all items are shown and no selection on only on sale items items = Item.objects.all() - #for item in items: - # print(item.image) + for item in items: + item.image_base64 = base64.b64encode(item.image.read()).decode('utf-8') html = render_template("listBid.html", items=items) return html