mirror of
https://github.com/Crocmagnon/checkout.git
synced 2024-11-22 08:08:04 +01:00
Display messages when saving forms
This commit is contained in:
parent
0ca236f0bf
commit
8912ad5178
4 changed files with 24 additions and 4 deletions
|
@ -15,6 +15,8 @@ from pathlib import Path
|
||||||
import environ
|
import environ
|
||||||
|
|
||||||
# Build paths inside the project like this: BASE_DIR / 'subdir'.
|
# Build paths inside the project like this: BASE_DIR / 'subdir'.
|
||||||
|
from django.contrib import messages
|
||||||
|
|
||||||
BASE_DIR = Path(__file__).resolve(strict=True).parent.parent
|
BASE_DIR = Path(__file__).resolve(strict=True).parent.parent
|
||||||
|
|
||||||
env = environ.Env(
|
env = environ.Env(
|
||||||
|
@ -196,7 +198,7 @@ SECURE_PROXY_SSL_HEADER = ("HTTP_X_FORWARDED_PROTO", "https")
|
||||||
|
|
||||||
# CSP
|
# CSP
|
||||||
CSP_DEFAULT_SRC = ("'none'",)
|
CSP_DEFAULT_SRC = ("'none'",)
|
||||||
CSP_IMG_SRC = ("'self'",)
|
CSP_IMG_SRC = ("'self'", "data:")
|
||||||
CSP_SCRIPT_SRC = ("'self'", "'unsafe-inline'")
|
CSP_SCRIPT_SRC = ("'self'", "'unsafe-inline'")
|
||||||
CSP_CONNECT_SRC = ("'self'",)
|
CSP_CONNECT_SRC = ("'self'",)
|
||||||
CSP_STYLE_SRC = ("'self'", "'unsafe-inline'")
|
CSP_STYLE_SRC = ("'self'", "'unsafe-inline'")
|
||||||
|
@ -209,3 +211,5 @@ DEFAULT_AUTO_FIELD = "django.db.models.AutoField"
|
||||||
|
|
||||||
CRISPY_ALLOWED_TEMPLATE_PACKS = "bootstrap5"
|
CRISPY_ALLOWED_TEMPLATE_PACKS = "bootstrap5"
|
||||||
CRISPY_TEMPLATE_PACK = "bootstrap5"
|
CRISPY_TEMPLATE_PACK = "bootstrap5"
|
||||||
|
|
||||||
|
MESSAGE_TAGS = {messages.ERROR: "danger"}
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
<title>Checkout</title>
|
<title>Checkout</title>
|
||||||
<link href="{% static "vendor/bootstrap-5.1.3-dist/css/bootstrap.min.css" %}"
|
<link href="{% static "vendor/bootstrap-5.1.3-dist/css/bootstrap.min.css" %}"
|
||||||
rel="stylesheet">
|
rel="stylesheet">
|
||||||
|
@ -12,6 +13,7 @@
|
||||||
<body>
|
<body>
|
||||||
<div class="container">
|
<div class="container">
|
||||||
{% include "common/navbar.html" %}
|
{% include "common/navbar.html" %}
|
||||||
|
{% include "common/messages.html" %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
</div>
|
</div>
|
||||||
|
|
10
src/common/templates/common/messages.html
Normal file
10
src/common/templates/common/messages.html
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
{% if messages %}
|
||||||
|
<div class="messages">
|
||||||
|
{% for message in messages %}
|
||||||
|
<div class="alert alert-{{ message.tags }} alert-dismissible fade show" role="alert">
|
||||||
|
{{ message }}
|
||||||
|
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
|
@ -1,4 +1,5 @@
|
||||||
from django.contrib.auth.mixins import LoginRequiredMixin, PermissionRequiredMixin
|
from django.contrib.auth.mixins import LoginRequiredMixin, PermissionRequiredMixin
|
||||||
|
from django.contrib.messages.views import SuccessMessageMixin
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.views.generic import CreateView, DeleteView, ListView, UpdateView
|
from django.views.generic import CreateView, DeleteView, ListView, UpdateView
|
||||||
|
|
||||||
|
@ -10,16 +11,18 @@ class ProtectedViewsMixin(PermissionRequiredMixin, LoginRequiredMixin):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class NewBasketView(ProtectedViewsMixin, CreateView):
|
class NewBasketView(ProtectedViewsMixin, SuccessMessageMixin, CreateView):
|
||||||
permission_required = ["purchase.add_basket"]
|
permission_required = ["purchase.add_basket"]
|
||||||
model = Basket
|
model = Basket
|
||||||
form_class = BasketForm
|
form_class = BasketForm
|
||||||
|
success_message = "Successfully created basket."
|
||||||
|
|
||||||
|
|
||||||
class UpdateBasketView(ProtectedViewsMixin, UpdateView):
|
class UpdateBasketView(ProtectedViewsMixin, SuccessMessageMixin, UpdateView):
|
||||||
permission_required = ["purchase.change_basket", "purchase.view_basket"]
|
permission_required = ["purchase.change_basket", "purchase.view_basket"]
|
||||||
model = Basket
|
model = Basket
|
||||||
form_class = BasketForm
|
form_class = BasketForm
|
||||||
|
success_message = "Successfully updated basket."
|
||||||
|
|
||||||
|
|
||||||
class ListBasketsView(ProtectedViewsMixin, ListView):
|
class ListBasketsView(ProtectedViewsMixin, ListView):
|
||||||
|
@ -29,9 +32,10 @@ class ListBasketsView(ProtectedViewsMixin, ListView):
|
||||||
ordering = "-id"
|
ordering = "-id"
|
||||||
|
|
||||||
|
|
||||||
class DeleteBasketView(ProtectedViewsMixin, DeleteView):
|
class DeleteBasketView(ProtectedViewsMixin, SuccessMessageMixin, DeleteView):
|
||||||
permission_required = ["purchase.delete_basket"]
|
permission_required = ["purchase.delete_basket"]
|
||||||
model = Basket
|
model = Basket
|
||||||
|
success_message = "Basket successfully deleted."
|
||||||
|
|
||||||
def get_success_url(self):
|
def get_success_url(self):
|
||||||
return reverse("purchase:list")
|
return reverse("purchase:list")
|
||||||
|
|
Loading…
Reference in a new issue