Files
web-danmu/activity/views.py

99 lines
2.8 KiB
Python

from django.shortcuts import render, redirect
from django.http import JsonResponse
from .models import ActivitySetting, Blessing, Danmu
from .forms import DanmuForm, ActivitySettingForm
# Create your views here.
def index(request):
"""主页面视图"""
setting = ActivitySetting.objects.first() or ActivitySetting.objects.create()
danmus = Danmu.objects.filter(is_approved=True).order_by('-created_at')
context = {
'setting': setting,
'danmus': danmus,
}
return render(request, 'activity/index.html', context)
def submit(request):
"""扫码提交视图"""
random_blessings = Blessing.objects.order_by('?')[:5]
if request.method == 'POST':
form = DanmuForm(request.POST, request.FILES)
if form.is_valid():
form.save()
return redirect('index')
else:
form = DanmuForm()
context = {
'form': form,
'random_blessings': random_blessings,
}
return render(request, 'activity/submit.html', context)
def admin_review(request):
"""管理员审核视图"""
danmus = Danmu.objects.filter(is_approved=False).order_by('-created_at')
if request.method == 'POST':
danmu_id = request.POST.get('danmu_id')
action = request.POST.get('action')
if danmu_id and action:
try:
danmu = Danmu.objects.get(id=danmu_id)
if action == 'approve':
danmu.is_approved = True
danmu.save()
elif action == 'reject':
danmu.delete()
except Danmu.DoesNotExist:
pass
return redirect('admin_review')
context = {
'danmus': danmus,
}
return render(request, 'activity/admin_review.html', context)
def setting(request):
"""设置视图"""
setting = ActivitySetting.objects.first() or ActivitySetting.objects.create()
if request.method == 'POST':
form = ActivitySettingForm(request.POST, request.FILES, instance=setting)
if form.is_valid():
form.save()
return redirect('index')
else:
form = ActivitySettingForm(instance=setting)
context = {
'form': form,
'setting': setting,
}
return render(request, 'activity/setting.html', context)
def api_danmu(request):
"""获取实时弹幕API"""
danmus = Danmu.objects.filter(is_approved=True).order_by('-created_at')[:50]
danmu_list = [
{
'id': danmu.id,
'name': danmu.name,
'content': danmu.content,
'image': danmu.image.url if danmu.image else None,
'created_at': danmu.created_at.strftime('%Y-%m-%d %H:%M:%S'),
}
for danmu in danmus
]
return JsonResponse({'danmus': danmu_list})