这次我们对问题列表和论坛模块功能进行了完善和实现,
这是问题回复的代码
# -*- 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 ResponseForm(forms.Form):
text = forms.CharField(widget=forms.Textarea)
code = forms.CharField(widget=forms.Textarea)
problem list page
class ProblemsView(generic.ListView):
model = Problem
template_name = 'judgeOL/problems.html'
context_object_name = 'problem_list'
@staticmethod
def get_problems(page_num):
if page_num > 20 or page_num < 0:
page_num = 0
a = page_num*50
b = a+50
return Problem.objects.all()[a:b]
# 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
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_response(request, problem_id, discussion_id):
if request.method == 'GET':
response_form = ResponseForm()
return HttpResponseRedirect(reverse('judgeOL:responses',
kwargs={'problem_id': problem_id, 'discussion_id': discussion_id}))
else:
response_form = ResponseForm(request.POST)
if response_form.is_valid():
pub_text = response_form.cleaned_data['text']
pub_code = response_form.cleaned_data['code']
user_id = request.session['user_id']
Response.objects.create(discussion_id=discussion_id, user_id=user_id, pub_text=pub_text,
pub_code=pub_code, pub_date=timezone.now(), vote_count=1)
return HttpResponseRedirect(reverse('judgeOL:responses',
kwargs={'problem_id': problem_id, 'discussion_id': discussion_id}))