feat(公开内容): 添加公开内容功能,支持文档和软件下载,无需登录即可访问

This commit is contained in:
2026-03-09 15:11:45 +08:00
parent e568f92c3c
commit a3e9de5af2
10 changed files with 431 additions and 4 deletions

View File

@@ -47,7 +47,9 @@ from .models import (
TodayPlan,
SystemConfig,
FamilyMember,
SummaryCategory
SummaryCategory,
PublicContentType,
PublicContent
)
from .forms import (
ReadingRecordForm,
@@ -55,7 +57,8 @@ from .forms import (
SummaryForm,
FamilyTaskForm,
TodayPlanForm,
SystemConfigForm
SystemConfigForm,
PublicContentForm
)
# 首页视图
@@ -955,3 +958,70 @@ def user_logout(request):
messages.success(request, '已成功注销!')
return redirect('login')
# 公开内容视图
def public_content(request):
"""公开内容页面 - 无需登录"""
logger.info("用户访问公开内容页面")
# 获取所有已发布的公开内容
public_contents = PublicContent.objects.filter(is_published=True)
# 按类型分组
content_by_type = {}
for content in public_contents:
type_name = content.type.name
if type_name not in content_by_type:
content_by_type[type_name] = []
content_by_type[type_name].append(content)
context = {
'content_by_type': content_by_type,
}
return render(request, 'core/public_content.html', context)
# 添加公开内容
@login_required
def add_public_content(request):
"""添加公开内容"""
if request.method == 'POST':
form = PublicContentForm(request.POST, request.FILES)
if form.is_valid():
form.save()
logger.info(f"添加公开内容: {form.cleaned_data['title']}")
return redirect('public_content')
else:
form = PublicContentForm()
context = {'form': form}
return render(request, 'core/add_public_content.html', context)
# 编辑公开内容
@login_required
def edit_public_content(request, pk):
"""编辑公开内容"""
content = get_object_or_404(PublicContent, pk=pk)
if request.method == 'POST':
form = PublicContentForm(request.POST, request.FILES, instance=content)
if form.is_valid():
form.save()
logger.info(f"编辑公开内容: {form.cleaned_data['title']}")
return redirect('public_content')
else:
form = PublicContentForm(instance=content)
context = {'form': form, 'content': content}
return render(request, 'core/edit_public_content.html', context)
# 删除公开内容
@login_required
def delete_public_content(request, pk):
"""删除公开内容"""
content = get_object_or_404(PublicContent, pk=pk)
if request.method == 'POST':
content.delete()
logger.info(f"删除公开内容: {content.title}")
return redirect('public_content')
context = {'content': content}
return render(request, 'core/delete_public_content.html', context)