Coverage for baibu/notifications/views.py: 100%
33 statements
« prev ^ index » next coverage.py v7.10.7, created at 2026-10-06 13:07 +0000
« prev ^ index » next coverage.py v7.10.7, created at 2026-10-06 13:07 +0000
1from django.contrib.auth.decorators import login_required
2from django.core.paginator import Paginator
3from django.http import HttpRequest
4from django.http import HttpResponse
5from django.shortcuts import get_object_or_404
6from django.shortcuts import redirect
7from django.shortcuts import render
8from django.utils.http import url_has_allowed_host_and_scheme
9from django.views.decorators.cache import cache_control
10from django.views.decorators.http import require_GET
11from django.views.decorators.http import require_POST
13from . import services
14from .models import Notification
17@login_required
18@cache_control(private=True, no_store=True)
19@require_GET
20def inbox(request: HttpRequest) -> HttpResponse:
21 page = Paginator(Notification.objects.filter(user=request.user), 30).get_page(request.GET.get("page"))
22 return render(request, "notifications/inbox.html", {"page": page})
25@login_required
26@require_POST
27def open_notification(request: HttpRequest, pk) -> HttpResponse:
28 notification = get_object_or_404(Notification, pk=pk, user=request.user)
29 services.mark_read(notification)
30 link = notification.link
31 if link and url_has_allowed_host_and_scheme(link, allowed_hosts={request.get_host()}):
32 return redirect(link)
33 return redirect("notifications:inbox")
36@login_required
37@require_POST
38def mark_all_read(request: HttpRequest) -> HttpResponse:
39 services.mark_all_read(request.user)
40 return redirect("notifications:inbox")