From b95b0ccd3f6b97cfdb211c74a54e74a0e7cf5365 Mon Sep 17 00:00:00 2001 From: sinavir Date: Wed, 3 Jul 2024 01:50:01 +0200 Subject: [PATCH] feat(qrcode): Automatic generation of qrcodes --- default.nix | 3 +++ inventory/templates/inventory/game.html | 3 +++ inventory/urls.py | 28 +++++++++-------------- inventory/views.py | 30 ++++++++++++++++++------- requirements.txt | 1 + 5 files changed, 40 insertions(+), 25 deletions(-) diff --git a/default.nix b/default.nix index a4ecad7..47ddc33 100644 --- a/default.nix +++ b/default.nix @@ -38,6 +38,9 @@ in ps.markdown-icons ps.authens + ps.qrcode + ps.pillow + # Django haystack is drunk ps.setuptools ])) diff --git a/inventory/templates/inventory/game.html b/inventory/templates/inventory/game.html index 917c247..9b294a8 100644 --- a/inventory/templates/inventory/game.html +++ b/inventory/templates/inventory/game.html @@ -30,6 +30,9 @@ Emprunter ou rendre « {{ game.title }} » + + Générer un QR-code +

Description

{{ object.description|linebreaks }} diff --git a/inventory/urls.py b/inventory/urls.py index 29d3813..be66a52 100644 --- a/inventory/urls.py +++ b/inventory/urls.py @@ -1,21 +1,10 @@ from django.urls import path -from .views import ( - InventoryView, - CategoryListView, - CategoryView, - TagListView, - TagView, - GameListView, - GameView, - AddGameCommentView, - ModifyGameCommentView, - InventorySearchView, - GameLoanView, - BorrowGameView, - ReturnGameView, - OngoingLoansView, - DetailLoanView, -) + +from .views import (AddGameCommentView, BorrowGameView, CategoryListView, + CategoryView, DetailLoanView, GameListView, GameLoanView, + GameView, InventorySearchView, InventoryView, + ModifyGameCommentView, OngoingLoansView, QrCodeView, + ReturnGameView, TagListView, TagView) app_name = "inventory" @@ -39,6 +28,11 @@ urlpatterns = [ path("loans/game//", GameLoanView.as_view(), name="game_loan"), path("loans/return//", ReturnGameView.as_view(), name="return_game"), path("loans/borrow//", BorrowGameView.as_view(), name="borrow_game"), + path( + "qrcode/borrow//", + QrCodeView.as_view(url="inventory:borrow_game"), + name="qrcode_borrow", + ), path("loans/ongoing/", OngoingLoansView.as_view(), name="ongoing_loans"), path("loans/all/", DetailLoanView.as_view(), name="all_loans"), ] diff --git a/inventory/views.py b/inventory/views.py index 52d9dfa..a19b403 100644 --- a/inventory/views.py +++ b/inventory/views.py @@ -1,13 +1,17 @@ -from django.views.generic import TemplateView, ListView, DetailView -from django.contrib.auth.mixins import PermissionRequiredMixin -from haystack.generic_views import SearchView -from haystack.forms import SearchForm -from haystack.query import SearchQuerySet -from django_tables2.views import SingleTableView +import qrcode from comments.views import AddCommentView, ModifyCommentView -from loans.views import BorrowView, ReturnView, DetailLoanView -from .models import Category, Tag, Game, GameComment, GameLoan +from django.contrib.auth.mixins import PermissionRequiredMixin +from django.http import HttpResponse +from django.urls import reverse +from django.views.generic import DetailView, ListView, TemplateView +from django_tables2.views import SingleTableView +from haystack.forms import SearchForm +from haystack.generic_views import SearchView +from haystack.query import SearchQuerySet +from loans.views import BorrowView, DetailLoanView, ReturnView + from .forms import BorrowGameForm +from .models import Category, Game, GameComment, GameLoan, Tag from .tables import LoanTable, OngoingLoansTable @@ -102,3 +106,13 @@ class DetailLoanView(PermissionRequiredMixin, SingleTableView): table_class = LoanTable template_name = "inventory/loans/loans_table.html" + +class QrCodeView(DetailView): + model = Game + url = "inventory:game" # Sensible default + + def get(self, request, *args, **kwargs): + response = HttpResponse(content_type="image/png") + img = qrcode.make(reverse(self.url, kwargs={"slug": self.get_object().slug})) + img.save(response, "PNG") + return response diff --git a/requirements.txt b/requirements.txt index 39ec4ed..4502768 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,5 +7,6 @@ django-markdownx==4.0.5 django-tables2==2.7.0 markdown-iconfonts==3.0.0 Pillow==10.1.0 +qrcode>=7.4.2 Whoosh==2.7.4 loadcredential==1.1