以下是论坛方面的代码
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.shortcuts import get_object_or_404, render, render_to_response
# Create your views here.
from django.http import HttpResponseRedirect, HttpResponse
from django.urls import reverse
from django.utils import timezone
from django.template import loader, RequestContext
from django.views import generic
from django import forms
from .models import Problem, User, SubmitCode, AcceptedCode, Discussion, Response
class DiscussionForm(forms.Form):
title = forms.CharField()
text = forms.CharField(widget=forms.Textarea)
code = forms.CharField(widget=forms.Textarea)
# coding page , submit code , get result
class CodingView(generic.TemplateView):
template_name = 'judgeOL/coding.html'
def get_context_data(self, **kwargs):
context = super(CodingView, self).get_context_data(**kwargs)
context['problem_id'] = self.kwargs['problem_id']
return context
# bbs page, so many discussions
class DiscussionView(generic.ListView):
model = Discussion
template_name = 'judgeOL/discussions.html'
context_object_name = 'discussion_list'
@staticmethod
def get_discussions(problem_id):
return Discussion.objects.get(problem_id=problem_id)
def get_context_data(self, **kwargs):
context = super(DiscussionView, self).get_context_data(**kwargs)
context['problem_id'] = self.kwargs['problem_id']
context['problem_name'] = Problem.objects.get(pk=self.kwargs['problem_id']).name
return context
# every discussions have a lot of responses
class ResponseView(generic.ListView):
model = Response
template_name = 'judgeOL/responses.html'
context_object_name = 'response_list'
def get_queryset(self):
return Response.objects.all().filter(discussion_id=self.kwargs['discussion_id'])
def get_context_data(self, **kwargs):
context = super(ResponseView, self).get_context_data(**kwargs)
context['discussion'] = Discussion.objects.get(pk=self.kwargs['discussion_id'])
context['problem_id'] = self.kwargs['problem_id']
return context
class EditView(generic.TemplateView):
template_name = 'judgeOL/edit.html'
def get_context_data(self, **kwargs):
context = super(EditView, self).get_context_data(**kwargs)
context['problem_id'] = self.kwargs['problem_id']
return context
def new_discussion(request, problem_id):
if request.method == 'GET':
return HttpResponseRedirect(reverse('judgeOL:discussions', args={problem_id}))
else:
try:
name = request.POST['title']
pub_text = request.POST['text']
pub_code = request.POST['code']
user_id = request.session['user_id']
Discussion.objects.create(user_id=user_id, problem_id=problem_id, name=name, pub_text=pub_text,
pub_code=pub_code, pub_date=timezone.now(), vote_count=1, view_count=1)
return HttpResponseRedirect(reverse('judgeOL:discussions', args={problem_id}))
except KeyError:
return HttpResponse('key error')
"""
discussion_form = DiscussionForm(request.POST)
if discussion_form.is_valid():
name = discussion_form.cleaned_data['title']
pub_text = discussion_form.cleaned_data['pub_text']
pub_code = discussion_form.cleaned_data['pub_code']
user_id = request.session['user_id']
Discussion.objects.create(user_id=user_id, problem_id=problem_id, name=name, pub_text=pub_text,
pub_code=pub_code, pub_date=timezone.now(), vote_count=1, view_count=1)
return HttpResponse(reverse('judgeOL:discussions', args={problem_id}))
else:
return HttpResponse('judgeOL/error.html')