99 lines
2.8 KiB
Python
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})
|