Add backlogger app at /backlogger/ with login protection
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
Django app with Item model (games/books/films/other categories), CRUD views, and login-required access. Login page at /accounts/login/ uses custom dark-themed template consistent with the site design. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
64
backlogger/views.py
Normal file
64
backlogger/views.py
Normal file
@@ -0,0 +1,64 @@
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.shortcuts import render, get_object_or_404, redirect
|
||||
from .models import Item
|
||||
from .forms import ItemForm
|
||||
|
||||
|
||||
SORT_MAP = {
|
||||
'fav': ['-favorite', 'name'],
|
||||
'az': ['name'],
|
||||
'za': ['-name'],
|
||||
'newest': ['-created_at'],
|
||||
'oldest': ['created_at'],
|
||||
'progress': ['-progress_percent'],
|
||||
}
|
||||
|
||||
|
||||
@login_required
|
||||
def item_list(request):
|
||||
category = request.GET.get('category', '')
|
||||
sort = request.GET.get('sort', 'fav')
|
||||
|
||||
items = Item.objects.all()
|
||||
if category:
|
||||
items = items.filter(category=category)
|
||||
items = items.order_by(*SORT_MAP.get(sort, SORT_MAP['fav']))
|
||||
|
||||
return render(request, 'backlogger/list.html', {
|
||||
'items': items,
|
||||
'category': category,
|
||||
'sort': sort,
|
||||
'categories': Item.CATEGORY_CHOICES,
|
||||
})
|
||||
|
||||
|
||||
@login_required
|
||||
def item_add(request):
|
||||
if request.method == 'POST':
|
||||
form = ItemForm(request.POST)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
return redirect('backlogger:list')
|
||||
else:
|
||||
form = ItemForm()
|
||||
return render(request, 'backlogger/item_form.html', {'form': form, 'action': 'Add'})
|
||||
|
||||
|
||||
@login_required
|
||||
def item_edit(request, pk):
|
||||
item = get_object_or_404(Item, pk=pk)
|
||||
if request.method == 'POST':
|
||||
form = ItemForm(request.POST, instance=item)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
return redirect('backlogger:list')
|
||||
else:
|
||||
form = ItemForm(instance=item)
|
||||
return render(request, 'backlogger/item_form.html', {'form': form, 'action': 'Edit', 'item': item})
|
||||
|
||||
|
||||
@login_required
|
||||
def item_delete(request, pk):
|
||||
if request.method == 'POST':
|
||||
get_object_or_404(Item, pk=pk).delete()
|
||||
return redirect('backlogger:list')
|
||||
Reference in New Issue
Block a user