87 lines
3.1 KiB
Python
87 lines
3.1 KiB
Python
from django.shortcuts import render, get_object_or_404, redirect
|
|
from django.contrib.auth.decorators import login_required
|
|
from django.contrib.auth import login
|
|
from django.contrib.auth.forms import UserCreationForm
|
|
from django.contrib import messages
|
|
from django.db.models import Q
|
|
from .models import Entry
|
|
|
|
@login_required
|
|
def entry_list(request):
|
|
query = request.GET.get('q', '')
|
|
mood = request.GET.get('mood', '')
|
|
entries = Entry.objects.filter(user=request.user)
|
|
if query:
|
|
entries = entries.filter(Q(title__icontains=query) | Q(content__icontains=query))
|
|
if mood:
|
|
entries = entries.filter(mood=mood)
|
|
return render(request, 'diary/entry_list.html', {
|
|
'entries': entries,
|
|
'query': query,
|
|
'mood_filter': mood,
|
|
'mood_choices': Entry.MOOD_CHOICES,
|
|
})
|
|
|
|
@login_required
|
|
def entry_detail(request, pk):
|
|
entry = get_object_or_404(Entry, pk=pk, user=request.user)
|
|
return render(request, 'diary/entry_detail.html', {'entry': entry})
|
|
|
|
@login_required
|
|
def entry_create(request):
|
|
if request.method == 'POST':
|
|
title = request.POST.get('title', '').strip()
|
|
content = request.POST.get('content', '').strip()
|
|
mood = request.POST.get('mood', 'calm')
|
|
if title and content:
|
|
Entry.objects.create(user=request.user, title=title, content=content, mood=mood)
|
|
messages.success(request, 'Entry created!')
|
|
return redirect('entry_list')
|
|
messages.error(request, 'Title and content are required.')
|
|
return render(request, 'diary/entry_form.html', {
|
|
'mood_choices': Entry.MOOD_CHOICES,
|
|
'action': 'Create',
|
|
})
|
|
|
|
@login_required
|
|
def entry_edit(request, pk):
|
|
entry = get_object_or_404(Entry, pk=pk, user=request.user)
|
|
if request.method == 'POST':
|
|
title = request.POST.get('title', '').strip()
|
|
content = request.POST.get('content', '').strip()
|
|
mood = request.POST.get('mood', 'calm')
|
|
if title and content:
|
|
entry.title = title
|
|
entry.content = content
|
|
entry.mood = mood
|
|
entry.save()
|
|
messages.success(request, 'Entry updated!')
|
|
return redirect('entry_detail', pk=pk)
|
|
messages.error(request, 'Title and content are required.')
|
|
return render(request, 'diary/entry_form.html', {
|
|
'entry': entry,
|
|
'mood_choices': Entry.MOOD_CHOICES,
|
|
'action': 'Edit',
|
|
})
|
|
|
|
@login_required
|
|
def entry_delete(request, pk):
|
|
entry = get_object_or_404(Entry, pk=pk, user=request.user)
|
|
if request.method == 'POST':
|
|
entry.delete()
|
|
messages.success(request, 'Entry deleted.')
|
|
return redirect('entry_list')
|
|
return render(request, 'diary/entry_confirm_delete.html', {'entry': entry})
|
|
|
|
def register(request):
|
|
if request.method == 'POST':
|
|
form = UserCreationForm(request.POST)
|
|
if form.is_valid():
|
|
user = form.save()
|
|
login(request, user)
|
|
messages.success(request, f'Welcome, {user.username}!')
|
|
return redirect('entry_list')
|
|
else:
|
|
form = UserCreationForm()
|
|
return render(request, 'diary/register.html', {'form': form})
|