feat(公开内容): 添加临时留言功能,留言保留10分钟,显示用户名、内容、时间和来源IP
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user