feat(公开内容): 添加临时留言功能,留言保留10分钟,显示用户名、内容、时间和来源IP

This commit is contained in:
xiaji
2026-05-25 22:04:57 +08:00
parent df595c706c
commit b1cf94cd23
8 changed files with 449 additions and 5 deletions

View File

@@ -50,7 +50,8 @@ from .models import (
FamilyMember,
SummaryCategory,
PublicContentType,
PublicContent
PublicContent,
TempMessage
)
from .forms import (
ReadingRecordForm,
@@ -60,7 +61,8 @@ from .forms import (
TodayPlanForm,
SystemConfigForm,
PublicContentForm,
TempUploadForm
TempUploadForm,
TempMessageForm
)
# 首页视图
@@ -1044,6 +1046,24 @@ def user_logout(request):
def public_content(request):
"""公开内容页面 - 无需登录"""
logger.info("用户访问公开内容页面")
if request.method == 'POST':
form = TempMessageForm(request.POST)
if form.is_valid():
message = form.save(commit=False)
x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
if x_forwarded_for:
message.ip_address = x_forwarded_for.split(',')[0].strip()
else:
message.ip_address = request.META.get('REMOTE_ADDR')
from datetime import timedelta
message.expire_at = timezone.now() + timedelta(minutes=10)
message.save()
logger.info(f"临时留言: {message.username or '匿名'} - {message.content[:20]}...")
return redirect('public_content')
else:
form = TempMessageForm()
public_contents = PublicContent.objects.filter(is_published=True)
content_by_type = {}
@@ -1054,10 +1074,13 @@ def public_content(request):
content_by_type[type_name].append(content)
temp_upload_form = TempUploadForm()
temp_messages = TempMessage.objects.filter(expire_at__gt=timezone.now())
context = {
'content_by_type': content_by_type,
'temp_upload_form': temp_upload_form,
'temp_messages': temp_messages,
'temp_message_form': form,
}
return render(request, 'core/public_content.html', context)